Java LinkedList对象继承覆盖

时间:2013-05-11 16:03:14

标签: java inheritance linked-list

我是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需要保持不变。如果可能的话!

3 个答案:

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