AbInnerClass不是一个抽象内部类吗?为什么还可以实例化一个对象

AbInnerClass不是一个抽象内部类吗?为什么还可以实例化一个对象

https://img1.sycdn.imooc.com//climg/628ddee9089fc51c05000386.jpg


接口不能实例化,但是接口里的内部类可以实例化?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,这里是一个匿名内部类的书写方式,new语句后面的对象实际上是AbInnerClass的子类而不是AbInnerClass本身。

祝学习愉快~


  • 慕粉1555086949 提问者 #1

    前面的 IOuterInterface.AbInnerClass abInner这个声明的是什么?不是IOuter是接口,AbinnerClass是抽象类,合起来就是接口里的抽象类
    匿名函数不是应该直接写new吗
    比如将上面的代码改成

    new IOuterInterface.AbInnerClass() {
    			
    			@Override
    			public void abInfo() {
    				// TODO Auto-generated method stub
    				System.out.println("重写抽象类中的抽象方法");
    			}
    		}.abInfo();;

    https://img1.sycdn.imooc.com//climg/628e1eb309f264a509090632.jpg
    输出跟上方一样

    2022-05-25 20:33:47
  • 好帮手慕小蓝 回复 提问者 慕粉1555086949 #2

    同学你好~

    1.IOuterInterface.AbInnerClass abInner的解释应当是:数据类型为IOuterInterface中的AbInnerClass类型,变量名为abInner;

    2.同学列举的代码和问题主题中的代码本质上是一样的。主题中的代码中,是将匿名内部类对象存储在abInner变量中,然后用该变量去调用方法。而同学列举的代码,省略了变量存储的过程,直接进行方法调用。例如下列代码,其含义是完全一样的。

    //创建对象
    Animal a = new Animal();
    //使用对象调用方法
    a.run();
    //创建对象同时调用方法,省略对象存储的过程
    new Animal().run();

    祝学习愉快~

    2022-05-26 09:43:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师