内部类概念:
内部类就是在一个类的内部再定义一个类,A中定义一个B类,那么B类相对于A类来说就称为内部类,A相对B来说就是被外部类。这两个类是有关联的。比方身体和头。
内部类也会生成一个class文件(独立的字节码文件)
特点: 内部类可以直接访问外部类的私有成员,而不破坏封装
可见内部类可以直接调用外部类中的name私有方法
1.成员内部类
在类的内部定义,与实例变量(属性)、实例方法同级别的类。
内部类对象是作为一个外部类的一个实例部分,创建内部类对象时必须依赖外部类对象,所以要先创建外部类对象才能创建内部类对象。
当内部类外部类存在重名属性时,会优先访问内部类属性,要想访问外部的属性name,要用Outer.this.name。更加明确
右侧是一个测试类,要new出内部类外部类对象,然后调用内部类声明的方法
输出
在内部类里面不能定义静态成员static,但是可以包含静态成员final,常量
2.静态内部类(static)
不依赖外部类对象,可以直接创建或通过类名访问,可声明静态成员。
在成员内部类的基础上加一个static
只有静态内部类才可以使用static修饰,别的普通的类是不能用static,比如在外部的类使用static是不行的
输出
3.局部内部类
定义在外部类的方法中,作用范围和创建对象范围仅适用于当前方法
这样什么都输出不出来,因为并没有调用Inner,所以要想执行show2,要在方法内部创建局部内部类对象
输出
4.匿名内部类
没有类名的局部内部类,(编译器自动起的名字),特征与局部内部类相同。
必须继承一个父类或实现一个接口。
优点可以减少代码量
缺点可读性较差
输出