为什么这里不应用动态绑定?



我创建了几个类。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()实现。

相关内容

  • 没有找到相关文章

最新更新