私は「MartianManager」クラスのプログラムを持っています。
import java.util.ArrayList;
public class MartianManager {
private ArrayList<Martian> martians;
private ArrayList<Martian> teleporters;
public void addMartian(Martian m) {
martians.add(m);
if(m instanceof GreenMartian)
teleporters.add(m);
}
//public Object clone() {
public Martian getMartianClosestToID(int id) {
}
public void groupSpeak() {
for(Martian m : martians) {
m.speak();
}
}
public void groupTeleport(String dest) {
}
}
および火星のクラス:
public abstract class Martian implements Cloneable {
int id;
public Martian(int id) {
this.id = id;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public int getId() {
return id;
}
public boolean equals(Object o){
return this.getId() == ((Martian)o).getId();
}
public abstract void speak();
public String toString(){
String str = "";
if (this instanceof GreenMartian) {
str = "Green martian" + id;
}
if (this instanceof RedMartian) {
str = "Red martian" + id;
}
return str;
}
}
GreenMartian で拡張されています。
public class GreenMartian extends Martian implements ITeleport{
public GreenMartian(int id) {
super(id);
}
public void speak() {
System.out.println(id + "Grobldy Grock");
}
public void teleport(String dest) {
System.out.println(id + "teleporting to " + dest);
}
}
また、RedMartian で拡張されました。
public class RedMartian extends Martian {
public RedMartian(int id) {
super(id);
}
public void speak() {
System.out.println(id + "Rubldy Rock");
}
}
実はいくつか質問がありますが、今のところ私の質問は Martian クラスの toString にあります。次のような文字列を返す必要があります: "Red [or Green] martian" +id. 火星人の型を判別する必要があり、instanceof を使い始めましたが、このように「火星人を変数に解決できませんでした」。これが最善の方法なのか、それとも equals() が型を決定する最善の方法なのかを判断しようとしていますか?
また、「クローン」を使用するのはこれが初めてなので、正確にどのように機能するかはわかりませんが、「クローン」が何であるかを判断し、そのように判断する方法があると思いましたか?
助けてくれてありがとう!