欢迎光临散文网 会员登陆 & 注册

150天打卡Day23_内部类

2021-05-18 11:34 作者:关阿姨的Java日记  | 我要投稿

内部类

  • 内部类即一个类中包含着另外一个类。里面的叫内部类,外面的叫外部类

  • 内部类只服务于外部类,对外不具备可见性

  • 内部类通常只在外部类中创建

一共有四种内部类,分别是成员内部类、局部内部类、匿名内部类、静态内部类。

为什么需要内部类

每个内部类都能继承一个接口的实现,所以不论外部类是否继承了某个实现,对于内部类没有影响,内部类使得多继承变得更加完整。

定义成员内部类

一个类可以定义在另一个类的内部,定义在类内部的类可以称之为Inner,外部的类称之为Outer;Inner类定义在Outer类的内部,通常只服务于Outer类,不对外具备可见性。Inner类可以直接调用Outer类的成员及方法(包括私有的)。例如:

从如上代码可以看出,可以直接从Inner类中直接调用Outer类私有变量name。

创建内部类对象

一般情况下,Inner对象会在Outer对象中创建,Inner对象中会有一个隐式的引用指向创建它的Outer对象。

class YNHello { private String name="hello"; class SayHi{ public void say(){ //访问修饰符为


实例化一个新的内部类时,需要使用外部类的实例.new的方式进行实例化。

匿名内部类

  • 若想创建一个类的对象,并且对象只被创建一次,此时该类不必命名,称之为匿名内部类对象



也可以用lambda表达式实现这种方式,lambda表达式是JAVA8的新特性,也是被广大开发者期待已久的功能。Lambda表达式支持将代码块作为参数,允许使用更简洁的代码来创建只有一个抽象方法的接口(函数式接口)的实例。

  • 注意事项:在jdk1.7的版本下,匿名内部类想访问外部的变量,该变量必须是final的

 

面试题

内部类有独立的.class吗?

 

有,每个类都会有相对应的.class文件,$1/2这种形式的文件都是内部类编译后的结果

 大家记得给关阿姨点个关注呦


150天打卡Day23_内部类的评论 (共 条)

分享到微博请遵守国家法律