内部类
1.本地内部类
注 : 用的 少
本地内部类 : 定义在方法当中 的 类
public class Main {
public void func() {
class Test{
public int a;
}
//缺点 : 只能 在当前方法 中使用,
// 想想 要这个 类 有啥用 只能在这个 方法中使用。。
}
public static void main(String[] args) {
}
}
2.实例内部类
定义一个类 ,实例内部类定义在这个类中,这个类 跟成员变量和 方法属于 同级
注意事项:
在实例内部类中不能 定义 一个静态的成员变量!
这里 非要定义 只能定义 一个 静态常量
加上 final 就不会报错 ,这里 就属于常量 了 ,常量是在程序编译的时候 确定的, 一旦 初始化 就不能进行 修
改了。
实例化内部类的对象
类他就有对象,那么 我们如何来实例化实例内部类的对象呢?
外部类名.内部类名 变量名 = 外部类对象的引用.new 内部类
继承内部类
访问同名 变量
查看字节码文件
实例内部类当中,包含了 和 外部类同名的 成员变量,如何 在实例内部类当中 访问?
【注意事项】
-
外部类中的任何成员都可以在实例内部类方法中直接访问
-
实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束
-
在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名
称.this.同名成员 来访问 -
实例内部类对象必须在先有外部类对象前提下才能创建
-
实例内部类的非静态方法中包含了一个指向外部类对象的引用
-
外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。
静态内部类
这里与实例内部类的 区别,是在 实例内部类 前加了一个static 修饰
实例化静态内部类 对象
访问外部类的普通的成员变量
这里 我们 对比 一下 实例内部类 和 静态内部类,你们觉得 那个 更好一点呢,这里 因该是 静态内部类,因为,实例化静态内部类对象的时候可以不需要外部类的 对象。
匿名内部类