学习资源:拉勾教育
内部类的基本概念
- 当一个类的定义出现在另外一个类的类体中时,那么这个类叫做内部类
Inner
,而这个内部类所在的类叫做外部类Outer
。 - 类中的内容:成员变量、成员方法、构造方法、静态成员、构造块和静态代码块、内部类。
实际作用
- 当一个类存在的价值仅仅是为某一个类单独服务时,那么就可以将这个类定义为所服务类中的内部类,这样可以隐藏该类的实现细节并且可以方便的访问外部类的私有成员而不再需要提供公有的get和set方法。
内部类的分类
- 普通内部类 - 直接将一个类的定义放在另外一个类的类体中。
- 静态内部类 - 使用static关键字修饰的内部类,隶属于类层级。
- 局部内部类 - 直接将一个类的定义放在方法体的内部时。
- 匿名内部类 - 就是指没有名字的内部类。
普通(成员)内部类的格式
访问修饰符 class 外部类的类名 {
访问修饰符 class 内部类的类名 {
内部类的类体;
}
}
普通内部类的使用方式
- 普通内部类和普通类一样可以定义成员变量、成员方法以及构造方法等。
- 普通内部类和普通类一样可以使用final或者abstract关键字修饰。
- 普通内部类还可以使用private或protected关键字进行修饰。
- 普通内部类需要使用外部类对象来创建对象。
- 如果内部类访问外部类中与本类内部同名的成员变量或方法时,需要使用this关键字。
/**
* 编程实现普通内部类的定义和使用 - 文档注释
*/
public class NormalOuter {
private int cnt = 1;
// 定义普通内部类,隶属于外部类的成员,并且是对象层级
public class NormalInner {
private int ia= 2;
private int cnt = 3;
public NormalInner() {
System.out.println("普通内部类的构造方法执行到了!");
}
public void show() {
System.out.println("外部类中的变量cnt = " + cnt); // 1 但是当内部类也有cnt时,这里cnt = 3了
System.out.println("内部类的变量ia = " + ia);
}
public void show2(int cnt) {
System.out.println("形参变量cnt = " + cnt); // 局部优先原则
System.out.println("内部类中cnt = " + this.cnt);
System.out.println("外部类中cnt = " + NormalOuter.this.cnt);
}
}
}
public class NormalOuterTest {
public static void main(String[] args) {
// 声明NormalOuter类型的引用指向该类型的对象
NormalOuter no = new NormalOuter()