quan878 2011-10-27 15:30
浏览 165
已采纳

【JAVA】关于继承关系中构造方法的问题

父类Person,有无参构造方法Person(),和公用方法func().

子类Teacher,有无参构造方法Teacher(),有参构造方法Teacher(int a)和公用方法func().

 

代码如下:

 

class Teacher extends Person {
    public Teacher() {
        super();
    }
    public Teacher(int a) { 
        System.out.print(a);
    }
    public void func() {
        System.out.print("2,");
    }
    public static void main(String[] args) {
        Teacher t1 = new Teacher();
        Teacher t2 = new Teacher(3);
    }

}

class Person {
    public Person() {
        func();
    }
    public void func() {
        System.out.print("1,");
    }
}

 题目是問运行结果是什么?

 

 我的理解如下:

从主方法入手,声明Teacher类的实例t1和t2,其中t1使用无参构造方法Teacher()进行初始化,而Teacher()中使用super(),即使用父类Person中无参构造方法Person(),在这个父类的构造方法中调用了func().所以,实例t1输出是:1, .

在实例t2中,使用有参构造方法Teacher(int a)进行初始化.所以,实例t2输出是:3 

所以猜测的运行结果应该为1,3

 

 实际运行结果为:2,2,3

 

 我的疑问是:为什么会在使用了super()的情况下,调用的func()却是子类中的func()?而且是调用了两次?望各位大神解答.

  • 写回答

1条回答 默认 最新

  • DreamZhong 2011-10-27 15:36
    关注

    [quote] 我的疑问是:为什么会在使用了super()的情况下,调用的func()却是子类中的func()?而且是调用了两次?望各位大神解答.[/quote]

    继承构造函数是从上往下构造,也就是说先构造父类再构造子类,这样就出现两次func调用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器