成员内部类,也叫实例内部类,相当于属性和方法
a;持有外部类的引用,可以直接访问外部类的属性和方法
b:如果内部类属性与外部类属性名相同,在内部类中访问外部类的属性,方式:Outer.this.name
c:在成员内部类中不能声明静态成员变量,除非定义成常量,使用final修饰
private static final String SEX="male"
d:在外部类中访问内部类的成员,实例化内部类对象之后访问
Inner inner=new Inner();
int age=inner.age;
e:实例化内部类对象
Outer outer=new outer();
Outer.Inner inner1=outer.new Inner();
Outer.Inner inner2=new Outer().new Inner();
f:编译生成的字节码文件:
Outer$Inner.class
//成员内部类
public class DemoInner01 {
public static void main(String[] args) {
//实例化内部类对象
Outer outer = new Outer();
Outer.Inner inner1 = outer.new Inner();
Outer.Inner inner2 = new Outer().new Inner();
}
}
class Outer{
private String name="tom";
public void run(){
System.out.println("Outer run()");
}
public void sleep(){
//访问内部类的成员,实例化内部类对象之后访问
Inner inner = new Inner();
System.out.println(inner.age);
inner.eat();
}
//成员内部类
class Inner{
private int age = 20;
//与外部类同名的属性
private String name="jack";
//在成员内部类中不能声明静态成员变量,除非定义成常量,使用final修饰
private static final String SEX="male";
public void eat(){
System.out.println("Inner eat()");
//持有外部类的引用,可以直接访问外部类的属性和方法
System.out.println(name);
run();
//如果内部类属性与外部类属性名相同,在内部类中访问外部类的属性
System.out.println(Outer.this.name);
}
}
}