我有以下三个类,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
在类中,与超类中的字段具有相同名称的字段将隐藏超类的字段,即使它们的类型不同。在子类中,不能用其简单名称引用超类中的字段。相反,必须通过super访问该字段,这将在下一部分中介绍。一般来说,我们不建议隐藏字段,因为这会使代码难以阅读。
您正在遮掩自己的领域,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;
}
}
另外,请不要使用原始类型
// ArrayList<a> mylist = new ArrayList();
ArrayList<a> mylist = new ArrayList<>(); // <a> on Java 5 and 6
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句