java内部类选择题,【码农每日一题】Java 内部类(Part 3)相关面试题

88ce583ced9f3307e7bb5b78963fb859.png

关注一下嘛,又不让你背锅!

3bffd1e81c9cc1123b158f9d353d11b3.png

问:下面关于成员内部类 InnerClass 的子类实现 ChildInnerClassX 中哪些是可以编译运行的?

classOutClass{

classInnerClass{

}

}

classChildInnerClass1extendsOutClass.InnerClass{

}

classChildInnerClass2extendsOutClass.InnerClass{

publicChildInnerClass2(){

super();

}

}

classChildInnerClass3extendsOutClass.InnerClass{

publicChildInnerClass3(OutClassoutClass){

super();

}

}

classChildInnerClass4extendsOutClass.InnerClass{

publicChildInnerClass3(OutClassoutClass){

outClass.super();

}

}

答:只有 ChildInnerClass4 子类是可以编译运行的,其他都无法编译通过。(虽然开发中很少会遇到这种)因为成员内部类的继承语法格式要求继承引用方式为 Outter.Inner 形式且继承类的构造器中必须有指向外部类对象的引用,并通过这个引用调用 super(),其实这个要求就是因为成员内部类默认持有外部类的引用,外部类不先实例化则无法实例化自己。

问:下面程序的运行结果是什么?为什么?

Listlist1=newArrayList();

Listlist2=newArrayList(){};

Listlist3=newArrayList(){{}};

Listlist4=newArrayList(){{}{}{}};

//1

System.out.println(list1.getClass()==list2.getClass());

//2

System.out.println(list1.getClass()==list3.getClass());

//3

System.out.println(list1.getClass()==list4.getClass());

//4

System.out.println(list2.getClass()==list3.getClass());

//5

System.out.println(list2.getClass()==list4.getClass());

//6

System.out.println(list3.getClass()==list4.getClass());

答:程序运行返回 6 个 false。

首先 list1 指向一个 ArrayList 对象实例;list2 指向一个继承自 ArrayList 的匿名类内部类对象;list3 也指向一个继承自 ArrayList 的匿名内部类(里面一对括弧为初始化代码块)对象;list4 也指向一个继承自 ArrayList 的匿名内部类(里面多对括弧为多个初始化代码块)对象;由于这些匿名内部类都出现在同一个类中,所以编译后其实得到的是 Demo$1、Demo$2、Demo$3 的形式,所以自然都互补相等了,不信你可以通过 listX.getClass().getName() 进行验证。

问:开发中使用 Java 匿名内部类有哪些注意事项(经验)?

答:常见的注意事项如下。

使用匿名内部类时必须是继承一个类或实现一个接口(二者不可兼得且只能继承一个类或者实现一个接口)。

匿名内部类中是不能定义构造函数的,如需初始化可以通过构造代码块处理。

匿名内部类中不能存在任何的静态成员变量和静态方法。

匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。

匿名内部类不能是抽象类,必须要实现继承的类或者实现接口的所有抽象方法。

问:Java 匿名内部类在使用时如何初始化吗?

答:匿名内部类无法通过构造方法初始化,所以我们只能通过构造代码块进行初始化。

嘎然而止,这是续上篇 Part 2 部分的内部类 Part 3 部分,内部类最后一个 Part 部分尽请收看明日推送续集(内部类绝对算的上是面试高频题了,细节很多)~~

86ea6e03207d45c11ff49c398ab42586.png老铁们,别嫌短,长了你肯定不会看完的,所以这就是码农每日一题的宗旨(其他历史文章请查看公众号历史记录)~

b14ce9464d2c7742bdb65121e4202564.png看完分享一波嘛,和你的小伙伴一起讨论才更加有意思,右上角分享 666~

bdf2e73d58344a2321b012c8d82812e2.png

看个笑话放松一下

音乐课上老师弹了一首贝多芬的曲子,小明问小华:“你懂音乐吗?”,小华:“是的”,小明:“那你知道老师在弹什麼吗?” ,小华: “钢琴。”

Only in your smile, I just have to breathe.

只有在你的微笑里,我才有呼吸。

d51ead8f0bb36b00d97dac551b3a814f.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值