0

我对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 将设置为零!

mList = new MyObjectList;

for (int i=0;i<10;i++)
{
   mObject = mList.addObject( new Box );
}

重要的是要记住,我的列表最终应该由不同的对象类型组成,因此 baseObject 需要保持原样。如果可能的话!

4

3 回答 3

2

你不能覆盖 Java 中的字段,所以如果你想在你的子类中设置objectWidth50你可以这样做:

public abstract class ObjectType {
    public int objectWidth;
    public ObjectType () {}
}

public abstract class Box extends ObjectType {
    public Box () {
        objectWidth = 50;
    }
}
于 2013-05-11T16:07:56.820 回答
1

由于变量没有被覆盖,而是被隐藏,在每个子类中再次声明变量并赋予它一个新值的方法是行不通的。

解决这个问题的一种方法是给你的抽象类一个方法,例如getObjectWidth(),并在每个子类中覆盖它。由于方法可以被覆盖,因此将显示每个对象的特定值。

于 2013-05-11T16:07:18.817 回答
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 () {}
}
于 2013-05-11T16:10:01.590 回答