【问题标题】:Attributes and polymorphism属性和多态性
【发布时间】:2012-05-02 09:29:25
【问题描述】:

我有 2 节课:

public class Increase {
public int a=3;
public void add(){
    a+=5;
    System.out.println("f");
}
}

class SubIncrease extends Increase{
    public int a=8;
    public void add(){
        a+=5;
        System.out.println("b" + a);

    }
}

但是当我跑步时

    Increase f=new SubIncrease();
    System.out.println(f.a);
    f.add();
    System.out.println(f.a);

我得到了这个输出:

3
b13
3

谁能帮我理解为什么会这样? a 属性的值在方法 add 中发生了变化,如第二个 outpuy 行所示...为什么会恢复到原来的值?

【问题讨论】:

    标签: java inheritance polymorphism overriding


    【解决方案1】:

    在 Java 中,字段不会被覆盖,它们是隐藏的。这意味着Increase.aSubIncrease.a独立 字段,可以单独更改和查询。因为变量f 的类型是Increase,所以表达式f.a 返回超类字段的值。但是add() 方法覆盖,f.add() 调用子类方法,该方法修改了子类字段。

    隐藏一个字段很少有意义,所以你应该避免它。如果你想在子类中有一个具有不同默认值的字段,只在超类中定义它,并在子类构造函数中为其赋值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      相关资源
      最近更新 更多