1分钟带你看懂Java内部类


1分钟带你看懂Java内部类

文章插图
 
1.为什么使用内部类?使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,
对于内部类都没有影响
1.1.使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,使用内部类还能够为我们带来如下特性:
(1)、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独 。
(2)、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类 。
(3)、创建内部类对象的时刻并不依赖于外围类对象的创建 。
(4)、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体 。
(5)、内部类提供了更好的封装,除了该外围类,其他类都不能访问 。
2.内部类分类:(一).成员内部类:
public class Outer{ private int age = 99; String name = "Coco"; public class Inner{ String name = "Jayden"; public void show(){ System.out.println(Outer.this.name); System.out.println(name); System.out.println(age); } } public Inner getInnerClass(){ return new Inner(); } public static void main(String[] args){ Outer o = new Outer(); Inner in = o.new Inner(); in.show(); } }1.Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等
2.Inner 类中定义的 show() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性age
3.定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );
4.编译上面的程序后,会发现产生了两个 .class 文件: Outer.class,Outer$Inner.class{}
5.成员内部类中不能存在任何 static 的变量和方法,可以定义常量:
(1).因为非静态内部类是要依赖于外部类的实例,而静态变量和方法是不依赖于对象的,仅与类相关 。简而言之:在加载静态域时,根本没有外部类,所以在非静态内部类中不能定义静态域或方法,编译不通过; 非静态内部类的作用域是实例级别
(2).常量是在编译器就确定的,放到所谓的常量池了


    推荐阅读