我是Java的新手,我有一个ObjectType类的链接列表,我有各种ObjectType的子类被添加到linkedList,当我拉出对象时,我被迫传递一种ObjectType并且似乎丢失子类的继承属性....任何人都可以为我阐明这一点吗?
//LIST STORING OBJECT
public class MyObjectList{
private LinkedList<ObjectType> queue = new LinkedList<ObjectType>();
public MyObjectList()
{
queue = new LinkedList<ObjectType>();
}
public ObjectType addObject(ObjectType myObject)
{
queue.add(myObject);
return myObject;
}
}
//MY BASIC OBJECT
public abstract class ObjectType {
public int objectWidth;
public ObjectType () {}
}
//MY EXTENDED OBJECT BOX
public abstract class Box extends ObjectType {
public int objectWidth = 50;
public ObjectType () {}
}
//MY EXTENDED OBJECT PLATE
public abstract class Box extends ObjectType {
public int objectWidth = 25;
public Box() {}
}
//好的,现在如果我在我的盒子列表中添加一堆盒子,将其objectWidth设置为零!
mList = new MyObjectList;
for (int i=0;i<10;i++)
{
mObject = mList.addObject( new Box );
}
重要的是要记住我的列表最终应该由不同的对象类型组成,因此baseObject需要保持不变。如果可能的话!
答案 0 :(得分:2)
您无法覆盖Java中的字段,因此如果要在子类中将objectWidth
设置为50
,则可以这样做:
public abstract class ObjectType {
public int objectWidth;
public ObjectType () {}
}
public abstract class Box extends ObjectType {
public Box () {
objectWidth = 50;
}
}
答案 1 :(得分:1)
由于变量不是重写,而是隐藏,因此在每个子类中再次声明变量并为其赋予新值的方法不起作用。
解决此问题的一种方法是为您的抽象类提供一种方法,例如getObjectWidth()
,并在每个子类中覆盖它。由于可以覆盖方法,因此将为每个对象显示特定值。
答案 2 :(得分:0)
使用的更好的模式是每个类的常量,如。
//MY BASIC OBJECT
public abstract class ObjectType {
public abstract int objectWidth();
public ObjectType () {}
}
//MY EXTENDED OBJECT BOX
public class Box extends ObjectType {
public int objectWidth() { return 50; }
public ObjectType () {}
}