前言
在上文中,讲到了静态内部类,本文主要谈一下成员内部类、局部内部类和匿名内部类。
成员内部类
和静态内部类非常相似,都是定义在一个类中的成员位置,与静态内部类唯一的区别是,成员内部类没有static修饰。或者也可以这么理解:我们知道一个类有成员变量、有成员方法,那么这些成员定义在类中的哪个位置,那么成员内部类也就定义在哪个位置。
特点
虽然是定义在类的内部,但是内部类和外部类并不是继承关系。成员内部类定义在外部类的成员位置上。会生成两个.class文件,一个是Outer.class,一个是Inner.class。生成成员内部类的实例对象的语法:Outer.Inner inner = new Outer().new Inner()。
案例a
成员内部类-案例a
小总结
初次查看成员内部类的创建实例对象的方式总是感觉有那么点特殊,但是仔细想想,才体会到了Java真的是非常严谨而且是很优美的。事实上,既然是叫做成员,那么这个成员内部类实际上是和成员变量、成员方法是属于同一级的,是不属于外部类这个类的,而是属于外部类的实例对象,但是呢,这个成员内部类又有点特殊,毕竟是一个类,那么既然是类,就可以创建对象,那么问题来了:如果想要创建内部类的对象,那么必然必须是要存在外部类的对象的,所以我们去创建成员内部类的对象的时候,首先应该是new Outer()创建好外部类之后,再去创建内部类的实例对象。
案例b
成员内部类-案例b
小总结
成员内部类可以访问外部类的静态和非静态的方法和成员变量。生成成员内部类的实例对象的方式:Outer.Inner inner = new Outer().new Inner()。如果想要在成员内部类中访问外部类的成员变量,语法是:Outer.this.成员变量。
每日一题:
不同级别的用户对同一对象拥有不同的访问权利或者是某个客户端不能直接操作到某个某个对象,但是又必须和那个对象有所互动,那么这种情况最好使用()设计模式。
A、Bridge模式
B、Facade模式
C、Adapter模式
D、Proxy模式
温馨提示:
欢迎各位小伙伴留言写出您心中的答案哦!
互相交流,互相学习。