2020-11-16

Java之成员内部类详解

2020-11-16

小码哥编程学习

发布时间:18-05-1622:30

前言

在上文中,讲到了静态内部类,本文主要谈一下成员内部类、局部内部类和匿名内部类。

成员内部类

和静态内部类非常相似,都是定义在一个类中的成员位置,与静态内部类唯一的区别是,成员内部类没有static修饰。或者也可以这么理解:我们知道一个类有成员变量、有成员方法,那么这些成员定义在类中的哪个位置,那么成员内部类也就定义在哪个位置。

特点

虽然是定义在类的内部,但是内部类和外部类并不是继承关系。成员内部类定义在外部类的成员位置上。会生成两个.class文件,一个是Outer.class,一个是Inner.class。生成成员内部类的实例对象的语法:Outer.Inner inner = new Outer().new Inner()。

案例a

2020-11-16成员内部类-案例a

小总结

初次查看成员内部类的创建实例对象的方式总是感觉有那么点特殊,但是仔细想想,才体会到了Java真的是非常严谨而且是很优美的。事实上,既然是叫做成员,那么这个成员内部类实际上是和成员变量、成员方法是属于同一级的,是不属于外部类这个类的,而是属于外部类的实例对象,但是呢,这个成员内部类又有点特殊,毕竟是一个类,那么既然是类,就可以创建对象,那么问题来了:如果想要创建内部类的对象,那么必然必须是要存在外部类的对象的,所以我们去创建成员内部类的对象的时候,首先应该是new Outer()创建好外部类之后,再去创建内部类的实例对象。

案例b

2020-11-16成员内部类-案例b

小总结

成员内部类可以访问外部类的静态和非静态的方法和成员变量。生成成员内部类的实例对象的方式:Outer.Inner inner = new Outer().new Inner()。如果想要在成员内部类中访问外部类的成员变量,语法是:Outer.this.成员变量。