当我使用县的toString()方法时,它应显示其子结构,包括馆藏,通过调用馆藏' toString()方法。 问题在于我很困惑,当我调用郡的toString()方法时,我会得到他们的常规名称,例如" Wessex"虽然Hold的toString()方法仅返回哈希码而不是伦敦例如。 动态绑定是否适用于县的toString()方法中的for-each循环?
编辑1:威塞克斯和伦敦是一个很小的例子。
GeoUnit :
public class GeoUnit {
private String name;
private Color RGB;
private Image COA;
public GeoUnit(String name, Color RGB, Image COA) {
this.name = name;
this.RGB = RGB;
this.COA = COA;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
县:
public class County extends GeoUnit {
private int positionLandedTitles;
private GeoUnit superstruct;
private ArrayList<GeoUnit> substruct;
private String capital;
public County(int positionLandedTitles, String name, Color RGB, Image COA, ArrayList<? extends GeoUnit> substruct, String capital, GeoUnit superstruct) {
super(name, RGB, COA);
this.positionLandedTitles = positionLandedTitles;
this.substruct = substruct;
this.capital = capital;
this.superstruct = superstruct;
}
@Override
public void setName(String name) {
super.setName(name);
}
@Override
public String toString() {
String a = "";
for (GeoUnit g : substruct) {
a += g.toString() + "\n";
}
return ("Name County: " + super.getName()+ "\n \t\t\tSubstruct: " + a);
}
控股:
public class Holding extends GeoUnit {
public Holding(String name, Color RGB, Image COA) {
super(name, RGB, COA);
this.name=name;
}
@Override
public void setName(String name) {
super.setName(name);
}
@Override
public String getName(){
return super.getName();
}
答案 0 :(得分:1)
您应该在Holding类中定义toString()方法。因为它没有在那里定义,也没有在超类(GeoUnit)中定义,所以使用了超级超类方法(Object)
答案 1 :(得分:1)
您正在调用
g.toString()
但您尚未在toString()
或其任何子类中实施GeoUnit
方法。因此,将使用继承的Object#toString()
实现。