0

だから私はオブジェクトのArrayListを持っています。これらのオブジェクトの内部には、さまざまな属性とその値があります。

コードはとてもシンプルです。GBox と GCircle は GHP の子です。ArrayList は World にあります。

私がしたいのは、箱のHPと体積、および円のHPと直径を印刷することです。オーバーライドできることは理解していますtoString()が、実際には値を取得したいと考えています。そうするための正しい構文は何ですか?

//Main.java
public class Main {
    public static void main(String[] args) {
        Ini i = new Ini();
    }
}

//Ini.java
public class Ini {
    private static World w;

    public Ini() {
        w = new World;
        w.makeGBox();
        w.makeGCircle();
        System.out.println("Box: HP: " +
                           w.getList().get(0).getHP() +
                           "Volume: " +
                           w.getList().get(0).GBox.getVolume());
                           //compile error no variable GBox in GHP
        System.out.println("Circle: HP: " +
                           w.getList().get(1).getHP() +
                           "Radius: " +
                           w.getList().get(1).GCircle.getRadius());
                           //compile error no variable GCircle in GHP
    }
}

//World.java
import java.util.ArrayList;

public class World {
    private ArrayList<GHP> list = new ArrayList<>();

    public void makeGBox() {
        list.add(new GBox());
    }
    public void makeGCircle() {
        list.add(new GCircle());
    }

    public ArrayList<GHP> getList() {
        return list;
    }
}

//GHP.java
public class GHP {
    private int HP;

    public GHP() {
        setHP(5);
    }

    public int getHP() {
        return HP;
    }
    public void setHP(int HP) {
        this.HP = HP;
    }
}

//GBox.java
public class GBox extends GHP{
    private int volume;

    public GBox() {
        setVolume(10);
    }

    public int getVolume() {
        return volume;
    }
    public void setVolume(int volume) {
        this.volume = volume;
    }
}

//GCircle.java
public class GCircle extends GHP{
    private int radius;

    public GCircle {
        setRadius(7);
    }

    public int getRadius() {
        return radius;
    }
    public void setRadius(int radius) {
        this.radius = radius;
    }
}
4

5 に答える 5

0

GHP次のような特定の型へのジェネリック参照をキャストする必要があります。

((GCircle) ghp).getRadius()

instanceofオペレーターについても調べてみてください。

アイデアは次のとおりです。

  • toString()クラス固有の情報は必要ないため、出力の場合はメソッドをオーバーライドし、オブジェクトの詳細を出力するだけです

  • クラス固有の操作の場合、特定のタイプにダウンキャストします

于 2013-10-04T07:52:32.140 に答える