我的示例代码结构是这样的。有一个父类Building和一个子类House。
层楼高
public class Building {
private String name;
private int noOfHouses;
}
内部
public class House extends Building {
private String houseNumber;
}
我想编写一个泛型方法,以便我也可以访问子类方法。 像这样的东西。
public <T> void construct(T a){
System.out.println(a.getHouseNumber());
}
请帮忙。
答案 0 :(得分:1)
事实上,您的示例并未显示泛型的必要性。您可以使用:
public static void construct(House a){
System.out.println(a.getHouseNumber());
}
同样的事情,使用泛型不必要地复杂也可以正常工作:
public static <T extends House> void construct(T a){
System.out.println(a.getHouseNumber());
}
答案 1 :(得分:0)
泛型与此问题无关。 Java为您提供RunTimePolymorphism的功能,但您无法使用父引用调用子级的特定方法。
考虑以下情况:
Building b = new House(); //Fine
b.getHouseNumber() // Compiler will be happy only if getHouseNumber is in Building.
答案 2 :(得分:0)
你不能,也不应该这样做。让父类了解子类的具体方法是个坏主意。
如果此方法位于House
,或者任何其他不使父/子关系复杂化的类,则可以使用有界参数:
public static <T extends House> void construct(T a){
System.out.println(a.getHouseNumber());
}
如果父项是抽象的,可以做同样的事情,如上所述:
public abstract class Building {
private String name;
private int noOfHouses;
public abstract String getHouseNumber();
public static <T extends Building> void construct(T a){
System.out.println(a.getHouseNumber());
}
}
请注意,父级不必是抽象的,只要它与您的设计一致
即可答案 3 :(得分:0)
我同意Ernest Kiwele,但是如果你想访问一个属于子类的方法,你可以覆盖每个子类中的方法
abstract class Building{
private String name;
private int noOfHouses;
public abstract String getHouseNumber();
public void construct(){
System.out.println( getHouseNumber() );
}
}
public class House extends Building{
private String houseNumber = "houseNumber";
public String getHouseNumber(){
return this.houseNumber;
}
public static void main(String[] args){
House h = new House();
h.construct();
}
}