成员内部类的概念
- 一个类A内部定义了一个类B, 那么B就是A的成员内部类, A可以称为外部类。
成员内部类对象实例化
- 内部类的类型表示:外部类名.内部类名
- 成员内部类创建对象,需要借助外部类的对象,如下:
- 外部类名.内部类名 变量 = 外部类对象.new 内部类构造方法(参数);
内部类访问外部类成员
- 成员内部类的方法中默认存在一个外部类对象: 外部类名.this 。可用此格式来调用外部类成员,访问时如果没有冲突,格式可省略,如果有冲突就不能省略了。
- 对于外部类来讲,没有默认的内部类对象的,如果要访问内部类的成员,需要创建内部类对象
public class Test {
public static void main(String[] args) {
Person person = new Person(); // 创建外部类对象
Person.Heart heart = person.new Heart(); // 创建成员内部类对象
heart.beats();
System.out.println("=====================");
heart.show();
System.out.println("=====================");
person.show();
}
}
// 外部类
class Person {
private int age = 10;
private String name = "xiaobo";
public void show() {
Heart heart = new Heart(); // 在外部类里创建成员内部类的对象
// 访问内部类的私有成员变量
System.out.println(heart.age); // 20
}
// 成员内部类
class Heart {
// 内部类的私有变量
private int age = 20;
private int rate = 80;
public void beats() {
System.out.println("咚咚咚!");
}
public void show() {
int age = 30;
// 访问局部变量
System.out.println(age); // 30
// 访问成员内部类私有变量
System.out.println(this.age); // 20
// 访问外部类私有变量
System.out.println(Person.this.age); // 10
// 访问外部类私有变量 因为该变量外部类独有 外部类.this.可以省略
System.out.println(name); // xiaobo
}
}
}