Java继承了使用错误类的方法

时间:2012-03-10 23:47:57

标签: java inheritance

所以我有一个父类,这里称为A,而B类则扩展为A。

public class A
{
  private int a = 1;
  public int getA()
  {
    return a;
  }
}

public class B extends A
{
  private int a = 2;
}

然而,当调用B.getA()时,它从A类返回1而不是B类中的2。我做错了吗?因为几个月前我遇到了类似的问题,并且在经历了很多混乱后奇迹般地工作了。唯一的区别是该方法处理将对象添加到ArrayList。

感谢。

2 个答案:

答案 0 :(得分:6)

私有变量甚至是子类的私有变量。 A.a和B.a是两个完全不同的领域。如果要更改子类中的数据,请将其设置为受保护的字段,或者(更好的是)将可选的抽象getter添加到父类并在子类中覆盖它。

答案 1 :(得分:2)

原因是类中定义的字段在子类中从不覆盖,无论字段的访问修饰符。

如果在子类中声明一个与超类中的字段同名的字段,则子类实际上有两个具有该名称的字段。从超类继承的字段在子类中是 hidden ,但是(如果访问规则允许),可以在子类中访问超类版本;例如通过使用类名限定字段名称。

(在您的特定示例中,访问规则禁止 B访问a中声明的Aprivate字段或方法只能从类本身或嵌套类访问。但即便如此, 在任何a实例实例中都有两个名为B的字段。)