我对Java相当陌生,我有一个类ObjectType的linkedList,我有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将被设置为0 !
mList = new MyObjectList;
for (int i=0;i<10;i++)
{
mObject = mList.addObject( new Box );
}
重要的是要记住,我的列表最终应该由不同的对象类型组成,因此baseObject需要保持原样。如果可能的话!
你不能在Java中重写字段,所以如果你想在子类中设置objectWidth
为50
,你会这样做:
public abstract class ObjectType {
public int objectWidth;
public ObjectType () {}
}
public abstract class Box extends ObjectType {
public Box () {
objectWidth = 50;
}
}
由于变量没有覆盖,而是隐藏,因此在每个子类中再次声明变量并给它一个新值的方法不起作用。
解决这个问题的一种方法是给你的抽象类一个方法,例如getObjectWidth()
,并在每个子类中重写它。因为方法可以被覆盖,所以这种方式将为每个对象显示特定的值。
一个更好的模式是每个类使用一个常量,如。
//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 () {}
}