难度
初级
学习时间
10分钟
适合人群
零基础
开发语言
Java
开发环境
- JDK v11
- IntelliJ IDEA v2018.3
提示
本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。
1.抽象类的匿名内部类
演示:
请在Main类中定义一个抽象内部类People。
在Main类main()方法中创建一个People的匿名内部类对象。
在匿名内部类中定义构造方法。
请观察程序运行结果。
代码:
Main类:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/main/Main.javaError:(25, 20) java: 方法声明无效; 需要返回类型
从运行结果来看,程序出错了。
错误原因是我们定义在匿名内部类里面的构造方法没有返回值类型,大家都知道构造方法是不需要返回值类型的,这里肯定定义的是普通方法。所以,抽象类的匿名内部类里面是无法定义构造方法的。
2.带参数构造方法的抽象类的匿名内部类
演示:
请在Main类中定义一个抽象内部类People,并定义一个带参数的构造方法。
在Main类main()方法中创建一个People的匿名内部类对象。
在匿名内部类中定义构造方法。
请观察程序运行结果。
代码:
Main类:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/main/Main.javaError:(28, 20) java: 方法声明无效; 需要返回类型
从运行结果来看,程序出错了。错误原因就是匿名内部类里面不能定义构造方法。那么,接下来我们把构造方法去掉试试:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/main/Main.javaError:(23, 25) java: 无法将类 main.Main.People中的构造器 People应用到给定类型; 需要: java.lang.String 找到: 没有参数 原因: 实际参数列表和形式参数列表长度不同
从运行结果来看,程序错误的原因是没有给构造方法传递参数。
在哪里传递参数呢?
就在创建匿名内部类对象的表达式中。例如,此例中:
结果:
从运行结果来看,我们传递参数的方式是正确的。
由此例得知,当抽象类存在有参构造方法时,匿名内部类必须要传递必要的参数给构造方法。
3.接口的匿名内部类
演示:
请在Main类中定义一个嵌套接口People。
在Main类main()方法中创建一个People的匿名内部类对象。
在匿名内部类里面定义构造方法。
请观察程序运行结果。
代码:
Main类:
结果:
错误信息:
文字版:
/Users/admin/Workspace/Java/Hello/src/main/Main.javaError:(25, 20) java: 方法声明无效; 需要返回类型
从运行结果来看,程序出错了。
错误原因是什么呢?是说我们定义在匿名内部类里的一个方法没有返回值类型:
我们之前都学过,匿名内部类只是一个表达式,它并不是一个类。所以无法定义构造方法。
总结
- 匿名内部类只能只继承一个抽象类并实现,不能再继承其他类。
- 匿名内部类实现接口后,不能再继承其他类,也不能再实现其他接口。
至此,Java中匿名内部类与构造方法注意事项相关内容讲解先告一段落,更多内容请持续关注。
附:匿名内部类学习资料
没有学习过的同学或者是不太清楚局部内部类的同学也别急,可以点击下面局部内部类学习资料来进行学习。
全栈2019”Java第九十五章:方法中可以定义静态局部内部类吗?
全栈2019”Java第九十七章:在方法中访问局部内部类成员详解
全栈2019”Java第九十八章:局部内部类访问作用域成员详解
“全栈2019”Java第一百章:局部内部类可以实现接口吗?
“全栈2019”Java第一百零一章:局部内部类覆盖作用域内成员详解
“全栈2019”Java第一百零二章:哪些作用域可以声明局部内部类?
“全栈2019”Java第一百零四章:匿名内部类与外部成员互访详解
“全栈2019”Java第一百零五章:匿名内部类覆盖作用域成员详解
“全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项
附:类学习资料
全栈2019”Java第三十九章:构造函数、构造方法、构造器
全栈2019”Java第五十一章:继承与final关键字详解
附:抽象类学习资料
全栈2019”Java第五十八章:多态中方法返回类型可以是子类类型
附:接口学习资料
附:内部类学习资料
全栈2019”Java第七十一章:外部类访问静态内部类成员详解
全栈2019”Java第七十三章:外部类里多个静态非静态内部类详解
全栈2019”Java第七十四章:内部类与静态内部类相互嵌套
全栈2019”Java第七十六章:静态、非静态内部类访问权限
全栈2019”Java第七十七章:抽象内部类与抽象静态内部类详解
全栈2019”Java第八十章:外部类是否能实现本类中的接口?
全栈2019”Java第八十一章:外部类能否访问嵌套接口里的成员?
全栈2019”Java第八十二章:嵌套接口能否访问外部类中的成员?
全栈2019”Java第八十七章:类中嵌套接口的应用场景(拔高题)
全栈2019”Java第九十章:内部类可以向上或向下转型吗?
全栈2019”Java第九十二章:外部类与内部类成员覆盖详解
全栈2019”Java第九十三章:内部类应用场景(迭代器设计模式)
答疑
如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。
上一章
“全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项
下一章
“全栈2019”Java第一百零八章:匿名内部类与final关键字
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号Gorhaf,私信“Java学习小组”。
- 方式二:关注公众号Gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!