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 ではフィールドをオーバーライドできないため、サブクラスでを設定objectWidthする場合は、次のようにします。50

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

変数はoverriddenではなくhiddenであるため、各サブクラスで変数を再度宣言して新しい値を与えるというアプローチは機能しません。

これを解決する 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 に答える