public class Outer {//只有内部类才能用static修饰
private int id=10;
public String out(){
System.out.println("这是外部类的方法");
return null;
}
//成员内部类:级别和外部类属性相同,不能定义静态属性
//成员内部类加上static就变为静态内部类:级别和外部类相同
public class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
//获得外部类的私有属性
public void getId(){
Outer outer = new Outer();访问外部类属性时,需先创建外部类对象
System.out.println(outer.id);//外部类属性与内部类属性名相同时,优先访问内部类属性;如果想访问外部类属性,需在前面加上Outer.this
}
//获得外部类的私有方法
public void getOut() {
System.out.println(out());
}
}
//局部内部类:不能加任何访问修饰符
public void method(){
class Inner{
public void inn(){
System.out.println(Outer.this.id);
}
}
Inner inner = new Inner();
inner.inn();
}
}
//一个java类中可以有多个class类,但只能有一个public class
class A{
public static void main(String[] args) {
}
}
public class Text{
public static void main(String[] args) {
//匿名内部类:必须继承一个父类或者实现一个接口
//没有名字初始化类,不用将实例保存到变量中
new Apple().eat();
new UsersService(){
@Override
public void go() {
}
};
}
}
class Apple{
public void eat(){
System.out.println("eat");
}
}
interface UsersService{
void go();
}
public class Application {
public static void main(String[] args) {
Outer outer = new Outer();
//通过外部类来实例化内部类
Outer.Inner inner = outer.new Inner();
inner.in();//这是内部类的方法
inner.getId();//10
inner.getOut();//这是外部类的方法 null
outer.method();
}
}