検索

ホームページ  >  に質問  >  本文

java子类和父类属性重复问题

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,继承的方法是子类会覆盖掉父类相同的方法,但是这属性为什么没覆盖

伊谢尔伦伊谢尔伦2769日前944

全員に返信(8)返信します

  • 巴扎黑

    巴扎黑2017-04-18 09:05:21

    親クラスの属性はプライベートであり、サブクラスも親クラスのメソッドをオーバーライドするときに、親クラスのメソッドを呼び出さないため、親クラスの属性値は空になります。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:05:21

    それらはすべてプライベートです!

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:05:21

    同じメンバー変数は上書きされません。http://blog.csdn.net/iwaich/article/details/9126661

    返事
    0
  • 黄舟

    黄舟2017-04-18 09:05:21

    変数はオーバーライドされません

    返事
    0
  • PHPz

    PHPz2017-04-18 09:05:21

    リーリー

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 09:05:21

    スーパーキーワードを使用する場合は、セッターメソッド本体を投稿することをお勧めします。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 09:05:21

    Student でメソッド a() をプログラムし、super を使用して Person クラスでそのメソッドを呼び出し、次に main メソッドで a() メソッドを呼び出すことができます。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-18 09:05:21

    この問題は解決されました。

    タイトルの説明にいくつかの誤りがあることを指摘します:

    親クラス(person)のname属性の値がnullになっていますが、継承方法としては親クラスの同じメソッドをサブクラスがオーバーライドすることになっていますが、なぜこの属性はオーバーライドされないのでしょうか?

    実際のところ、私の理解によれば、「親クラスの同名の属性に対するサブクラスの属性の影響」と「親クラスの同名のメソッドに対するサブクラスのメソッドの影響」は、同じ。

    実際、いわゆるサブクラスは、同じ名前の親クラスのメソッドを「オーバーライド」しますが、実際にはそれをカバーしておらず、親クラスのメソッドはまだ存在しています。デバッグベースではそれを確認できないだけです。

    返事
    0
  • キャンセル返事