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,继承的方法是子类会覆盖掉父类相同的方法,但是这属性为什么没覆盖
巴扎黑2017-04-18 09:05:21
親クラスの属性はプライベートであり、サブクラスも親クラスのメソッドをオーバーライドするときに、親クラスのメソッドを呼び出さないため、親クラスの属性値は空になります。
ringa_lee2017-04-18 09:05:21
Student でメソッド a() をプログラムし、super を使用して Person クラスでそのメソッドを呼び出し、次に main メソッドで a() メソッドを呼び出すことができます。
大家讲道理2017-04-18 09:05:21
この問題は解決されました。
タイトルの説明にいくつかの誤りがあることを指摘します:
親クラス(person)のname属性の値がnullになっていますが、継承方法としては親クラスの同じメソッドをサブクラスがオーバーライドすることになっていますが、なぜこの属性はオーバーライドされないのでしょうか?
実際のところ、私の理解によれば、「親クラスの同名の属性に対するサブクラスの属性の影響」と「親クラスの同名のメソッドに対するサブクラスのメソッドの影響」は、同じ。
実際、いわゆるサブクラスは、同じ名前の親クラスのメソッドを「オーバーライド」しますが、実際にはそれをカバーしておらず、親クラスのメソッドはまだ存在しています。デバッグベースではそれを確認できないだけです。