我创建了几个类。GeoUnit是直接从County和Holding扩展的基类。然而,县有一个由控股公司组成的子结构。
当我使用county的toString()方法时,它应该通过调用holdings的toString()方法来显示由holdings组成的子结构。问题在于,我感到困惑的是,当我调用County的toString()方法时,我得到了它们的常规名称,如"Wessex",而Holding的toString()方法只返回哈希码,而不是伦敦。不是动态绑定适用于for-each循环在toString()方法的县?
编辑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;
}
<<p> 县/strong>: 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 tttSubstruct: " + 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();
}
应该在Holding类中定义toString()方法。因为它没有在这里定义,也没有在超类(GeoUnit)中定义,所以使用超超类方法(Object)
您正在调用
g.toString()
,但您还没有在GeoUnit
或其任何子类中实现toString()
方法。因此,将使用继承的Object#toString()
实现。