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

java 继承的问题

java 继承的问题

MYYA 2019-03-01 10:36:44
// 父类 class Sup { int a = 8; public void printA(){ System.out.println(a); } Sup(){ printA(); } } //子类 class Sub extends Sup{ int a = 9; Sub(){ printA(); } public static void main(String[] args) { new Sub(); } } 为什么两次输出的都是 8 ,按照多态的概念,在子类构造函数中调用者应该是子类对象,访问的也因该是是子类对象的属性9。是不是我理解多态和继承有毛病。
查看完整描述

11 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

子类中定义和父类重名的属性并不会覆盖父类的原有属性,两者是共存的,父类方法中使用的属性来自父类定义的,printA虽然在子类中调用,但使用的仍然是父类中的a,想使用子类中的a,可以在子类中重写这个printA方法

查看完整回答
反对 回复 2019-03-01
?
www说

TA贡献1775条经验 获得超8个赞

你得先知道执行的顺序,先执行构造方法(父类--->子类),再初始化非静态变量

查看完整回答
反对 回复 2019-03-01
?
守候你守候我

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

因为你子类调用的是父类的printA方法, 子类的构造函数中 首先需要实例化父类对象即super(),然后由于你子类没有重写父类的printA方法,所以你调用的是父类的方法,父类方法访问父类的a,所以两个输出都是8

查看完整回答
反对 回复 2019-03-01
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

子类使用的是父类方法printA,而这个父类中的prontA所对应使用的参数a是父类中的变量,并不是子类中的
在并没有重写父类方法的前提下,是不会进行覆盖原有父类执行方式的。
建议你断点调试一下看看~

查看完整回答
反对 回复 2019-03-01
?
30秒到达战场

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

好像看到你问了两次这个问题, 你的子类并没有重写父类的printA方法,所以两次调用的都是父类的printA方法,所以都打印8

查看完整回答
反对 回复 2019-03-01
?
月关宝盒

TA贡献1772条经验 获得超5个赞

让我帮你梳理一下new sub()后发生了什么,这里不牵扯到多态的问题,是一个纯继承的问题,
1.new sub(),编译器执行这句话后,先找到sub这个类(并发现sub继承与sup),然后找到sub的空构造函数,开始执行sub构造函数。
2.但在执行sub构造函数前,必须先执行父类的空构造函数,即输出第一次8,。
3.父类构造函数执行完后,真正的子类构造函数来了。执行printA(),但是子类没有重写父类的printA方法,所以找到父类的printA来执行,这里的a还是父类的a,和子类的a没有关系,故输出第二次8。

(继承不包括私有成员private,这里的a没有具体些修饰符,默认就是private,所以你的子类并不是重写了父类的a,而是自己声明了自己的私有a)

有误望指正。

查看完整回答
反对 回复 2019-03-01
?
Qyouu

TA贡献1786条经验 获得超11个赞

1.new Sub()的时候会调用父类的构造函数,所以会有两次print
2.printA()是父类的方法,是声明在Sup这个类里的,System.out.println(a);打印的a不可能从跨过父亲里去找子类的属性a,因为java没有这个特性。

查看完整回答
反对 回复 2019-03-01
?
哆啦的时光机

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

或许你比较一下这个?你应该就知道他们之间的关系了。

// 父类
class Sup {
    private int a = 8;
    public void printA(){
        System.out.println(a);
    }
    Sup(){
        printA();
    }
}

//子类
class Sub extends Sup{
    Sub(){
        super();
        printA();
    }
    public static void main(String[] args) {
        new Sub();
    }
}
查看完整回答
反对 回复 2019-03-01
  • 11 回答
  • 0 关注
  • 486 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信