Java LinkedList对象继承被重写



我对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中重写字段,所以如果你想在子类中设置objectWidth50,你会这样做:

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 () {}
}

最新更新