我有三个类如下,类b和c正在扩展类a。我想知道为什么代码没有读取b和c变量的值。
public class a{
protected int myvalue = 1;
}
public class b extends a{
private int myvalue = 2;
}
public class c extends a{
private int myvalue = 3;
}
我主要方法的主体
ArrayList<a> myList= new ArrayList();
myList.add(new b());
myList.add(new c());
for(int i =0;i<myList.size();i++)
System.err.println("value is:" + myList.get(i).myvalue);
输出
1
1
在一个类中,一个与该字段中的字段同名的字段 超类隐藏了超类的字段,即使它们的类型是 不同。在子类中,超类中的字段不能 由简单名称引用。相反,必须访问该字段 通过超级,这将在下一节中介绍。通常 说来,我们不建议隐藏字段,因为它会使代码变得困难 阅读。
答案 0 :(得分:3)
你正在遮蔽你的领域myvalue
而不是覆盖它,我相信这样的东西会做你想做的事
public class a{
protected int myvalue = 1;
}
public class b extends a{
public b() {
myvalue = 2;
}
}
public class c extends a{
public c() {
myvalue = 3;
}
}
另外,请不要使用Raw Types
// ArrayList<a> mylist = new ArrayList();
ArrayList<a> mylist = new ArrayList<>(); // <a> on Java 5 and 6