为了账号安全,请及时绑定邮箱和手机立即绑定

你好,既然是调用内部类的构造方法,为什么用被我注释掉的那句替换掉ou.super()不行呢?

你好,既然是调用内部类的构造方法,为什么用被我注释掉的那句替换掉ou.super()不行呢?

江户川乱折腾 2022-04-14 10:11:17
class Outer{class Inner{}}class Child extends Outer.Inner{Child(Outer ou){ou.super();//Outer.Inner In = ou.new Inner();}public static void main(String [] args){Outer ou = new Outer();Child ch = new Child(ou);}}如上程序所示:Child为子类,从Outer.Inner中派生,但实例化子类对象时有点麻烦,需要调用内部类的构造函数,但:ou.super(); 这句话是什么语法规则?说Outer类中有super()这一方法?既然是调用内部类的构造方法,那用被我注释掉的那句替换掉ou.super();为什么不行呢?希望高手回答!!
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

这其实是内部类继承中的特殊语法

内部类也和其他普通类一样可以被继承,但是继承内部类较继承普通类要复杂一些,需要设置专门的语法进行继承。

创建OutputInnerClass类,使OutputInnerClass类继承ClassA类中的内部类ClassB。

public class OutputInnerClass extends ClassA.ClassB{ //继承内部类b
public OutputInnerClass(ClassA a)
{a.super();
}}
class ClassA{
class ClassB{}
}

这玩意儿看看有个印象就好 一般没什么用

在某个类继承内部类时,必须硬性给予这个类一个带参数的构造方法,并且该构造方法的参数为需要继承内部类的外部类的引用,同时在构造方法体中使用a.super()语句,这样才为继承提供了必要的对象引用。



查看完整回答
反对 回复 2022-04-19
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

super()是当前对象的直接父类的无参的构造函数。
在这个问题中super()的执行就是执行了Outer.Inner 的默认构造函数。
构造函数继承
规则:
1 子类无条件继承父类不含参数的构造函数
2 若子类无自己的构造函数,父类的无参构造函数做为子类构造函数,若有创建对象先执行父类无参构造函数,再执行自己的构造函数
3 父类中含参构造函数,子类可以在自己的构造函数中用super()来调用,必须放在第一句.

查看完整回答
反对 回复 2022-04-19
?
慕森王

TA贡献1777条经验 获得超3个赞

super()是当前对象的直接父类的无参的构造函数。
内部类也和其他普通类一样可以被继承,但是继承内部类较继承普通类要复杂一些,需要设置专门的语法进行继承。

创建OutputInnerClass类,使OutputInnerClass类继承ClassA类中的内部类ClassB。

public class OutputInnerClass extends ClassA.ClassB{ //继承内部类b
public OutputInnerClass(ClassA a)
{a.super();
}}
class ClassA{
class ClassB{}
}
在某个类继承内部类时,必须硬性给予这个类一个带参数的构造方法,并且该构造方法的参数为需要继承内部类的外部类的引用,同时在构造方法体中使用a.super()语句,这样才为继承提供了必要的对象引用。



查看完整回答
反对 回复 2022-04-19
  • 3 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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