接口抽象内部类

接口抽象内部类


相关截图:

61f50c00285ac7c605001000.jpg

问题描述:
这个抽象内部类实例化一点没懂,问题如下
1. 按照方法一来说,抽象类不能实例化为什么可以用抽象类对象指向抽象类实例化后的空间
2. 基于问题1,为什么这个对象还可以调用这样不是相当于把抽象类实例化成功了并且产生了对象并且这个对象还可以调用方法
3. 第二张方法new 父类.new 子类什么意思一点没有理解
4.另外接口有普通成员内部类为什么可以直接导入这个内部类,绕过实现它的类直接new一个这个接口里面成员内部类

正在回答 回答被采纳积分+1

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

1回答
好帮手慕小蓝 2022-01-29 18:31:24

    同学你好,老师这里针对同学的问题一一解答:

    1.这里使用的是匿名内部类的形式创建对象,虽然后面new语句写的是抽象类的名字,实际上这里创建的是该抽象类的子类对象。这也是匿名内部类的特点。

    2.基于上一点,由于这里实例化的是子类对象,所以这里的方法调用其实是多态的写法。

    3.这里连续两个new是语法的简写。成员内部类的创建方式是基于外部类对象的,所以需要先创建外部类的对象,通过这个对象来创建内部类对象。这一点是Java的语法。所以这里分开写的话应当如下:

//创建外部类对象
IOuterInterface ioi = new AbClassDemo();
//基于外部类对象创建内部类对象
IOuterInterface.AbInnerClass abInnerOne = ioi.new AbDemo();

    4.这里可以参考一般成员变量的使用方式,即通过继承关系可以访问父类成员。同理,也可以直接访问父类/父接口的成员内部类。不同的是,成员变量是具体的值或者对象,而内部类是一个类,必须进行实例化。所以这里是继承思想的拓展使用方式。

    祝学习愉快~


  • 提问者 胖胖的工程师 #1

    对于问题4,是不是父类或者父接口的内部类和子类外部类平级所以可以直接实例化

    2022-01-29 19:10:41
  • 同学你好,这里与级别无关,仅是因为类无法直接被访问,必须通过类的实例,即必须创建对象。

    祝学习愉快~


    2022-01-30 09:32:31
  • 提问者 胖胖的工程师 #3

    我可能没问清楚,我不理解的是问题4为什么直接实例化内部类而不用接口.内部类这种方式,为什么可以绕开接口这个外层的东西

    2022-01-30 15:47:03
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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