一点睛
匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的语法格式如下:
从上面的定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。
两条规则。
匿名内部类不能是抽象类。
匿名内部类不能定义构造器。由于匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以初始化块,可以通过初始化块来完成构造器需要完成的工作。
二实战
1点睛
最常用的创建匿名内部类的方式是创建某个接口类型的对象
2代码
3运行
购买了一个AGP显卡,花掉了567.8
4说明
定义匿名内部类无须class关键字,而是在定义匿名内部类时直接生成该匿名内部类的对象。
由于匿名内部类不能是抽象类,所以匿名内部类必须实现它的抽象父类或接口里包含的所有抽象方法。
三实战
1点睛
当通过接口来创建匿名内部类时,匿名内部类不能显示创建构造器,因此匿名内部类里只有一个隐式的无参构造器,故new接口名后的括号里不能传入参数值。
如果通过继承父类来创建匿名内部类时,匿名内部类将拥有和父类相似的构造器,此处的相似指的是拥有相同的形参列表。
2代码
3运行
购买了一个电子示波器,花掉了67.8
匿名内部类的初始化块...
购买了一个键盘,花掉了56.2
当创建以Device为父类的匿名内部类时,既可以传入参数,代表调用父类带参数的构造器;也可以不传入参数,代表调用父类无参数的构造器。
当创建匿名内部类时,必须实现接口或抽象父类里的所有抽象方法。如果有需要,也可以重写父类中的普通方法。
四实战
1点睛
在Java8之前,Java要求被局部内部类、匿名内部类访问的局部变量必须使用final修饰,从Java8开始这个限制取消了,Java8更加智能:如果局部变量被匿名内部类访问,那么该局部变量相对于自动使用了final修饰。
2代码
3结果
8
4说明
Java8将这个功能称为“effectivelyfinal”,它的意思是对于被匿名内部类访问的局部变量,可以用final修饰,也可以不用final修饰,但必须按照有final修饰的方式来使用——也就是一次赋值后,以后不能重新赋值。
以上就是动力节点java培训机构的小编针对“基础学习,Java中匿名内部类原理与用法详解”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习