use*_*043 0 java clone equals instanceof tostring
好吧,我有一个带有'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) {
}
}
Run Code Online (Sandbox Code Playgroud)
和火星类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
它与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);
}
}
Run Code Online (Sandbox Code Playgroud)
还通过RedMartian进行了扩展:
public class RedMartian extends Martian {
public RedMartian(int id) {
super(id);
}
public void speak() {
System.out.println(id + "Rubldy Rock");
}
}
Run Code Online (Sandbox Code Playgroud)
我实际上有几个问题,但现在我的问题是火星类的toString.它应该返回一个这样的字符串:"Red [或Green] martian"+ id.我需要确定火星人的类型,我开始使用instanceof但是像这样"火星人无法解析为变量".我试图确定这是否是最好的方法,或者如果equals()是确定类型的最佳方法?
这也是我第一次使用"克隆"所以不确定它是如何工作的,但有一种想法是否有办法确定"克隆"是什么并确定它是这样的?
感谢您的帮助!
没有
public String toString(){
String str;
if (Martian instanceof GreenMartian) {
}
Run Code Online (Sandbox Code Playgroud)
在abstract Martian课堂上是一个坏主意.您不希望父类依赖其子级.
toString()在每个子类中实现一个方法,让多态实现它的工作.
如果你绝对必须
if (Martian instanceof GreenMartian) {
Run Code Online (Sandbox Code Playgroud)
是错的.您可以使用instanceof为使
instanceOfClass instanceof SomeClass
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您将获得instanceOfClass对this关键字的引用,因为您在实例上调用该方法
this instanceof GreenMartian
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
658 次 |
| 最近记录: |