好的,伙计们,我有一个带有“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");
}
}
我实际上有几个问题,但现在我的问题是在火星类的 toString 中。它应该返回一个像这样的字符串:“Red [or Green] martian” +id。我需要确定火星人的类型,我开始使用 instanceof 但就像这样“火星人无法解析为变量”。我正在尝试确定这是否是最好的方法,或者 equals() 是否是确定类型的最佳方法?
这也是我第一次使用“克隆”,所以不确定它是如何工作的,但有一个想法是有没有办法确定“克隆”是什么并以这种方式确定?
感谢您的任何帮助!