java子类和父类属性重复问题
伊谢尔伦
伊谢尔伦 2017-04-18 09:03:21
0
8
943

java 子类继承 父类, 但子类中 包含和父类相同 属性 ,给子类赋值之后,父类的相同的属性值还是空的。
类定义如下:

public class Person {

    private String name;
    private String age;

    // ignore getter and setter
}

public class Student extends Person {

    private String name;
    private String score;
    
    // ignore getter and setter
}

public static void main(String[] args){
    Student stu = new Student();
    stu.setAge("12");
    stu.setName("test");
}

debug看到


父类(Person)的name属性值是null,继承的方法是子类会覆盖掉父类相同的方法,但是这属性为什么没覆盖

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(8)
巴扎黑

父類別的屬性被私有了,子類別也重寫了父類別的方法,重寫方法的時候也沒去呼叫父類別的方法,所以造成了父類別屬性值為空。

伊谢尔伦

都是private的啊!

巴扎黑

相同成員變數不會覆蓋,http://blog.csdn.net/iwaich/article/details/9126661

黄舟

變數沒有重寫這一說

PHPzhong

雷雷

小葫芦

建議貼出setter方法體 如果使用了 super關鍵字 再討論這個問題比較好

左手右手慢动作

可以在Student裡編一個方法a(),在方法裡用super呼叫Person類別裡方法,然後再在main方法裡呼叫該a()方法,應該可行

大家讲道理

這個問題已經解決了。

我只是指出題主在題目描述中的一點不準確的地方:

父類別(Person)的name屬性值是null,繼承的方法是子類別會覆寫父類別相同的方法,但這屬性為什麼沒覆寫。

其實,根據我的理解:「子類別屬性對父類別同名屬性的作用」與「子類別方法對父類別同名方法的作用」是相同的。

其實,所謂子類別」覆蓋了「父類別同名方法,其實並沒有真地覆蓋,父類別方法還在那裡。只不過你在debug根據裡看不到而已。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板