【发布时间】:2016-06-14 12:22:29
【问题描述】:
简而言之,我希望能够通过不实现特定接口的超类对类实例进行分组。但是从实例集中,我想从实现该接口的那些实例上的接口调用方法。
一些可以解释它的示例代码。
class Building{
String c = "white";
Building(){
}
void printColor(){
println("The building is " + c);
}
void paint( String c ){
this.c = c;
}
void printBuildQuality(){
println("The build quality is average");
}
}
class SturdyFactoryBuilding extends Building implements Factory{
SturdyFactoryBuilding(){
super();
}
void printBuildQuality(){
println("The build quality is sturdy");
}
void printFactoryOutput(){
println("This factory makes stuff");
}
}
class ShakyFactoryBuilding extends Building implements Factory{
ShakyFactoryBuilding(){
super();
}
void printBuildQuality(){
println("The build quality is shaky");
}
void printFactoryOutput(){
println("This factory makes slightly different stuff");
}
}
public interface Factory{
public void printFactoryOutput();
}
Building building = new SturdyFactoryBuilding();
building.printBuildQuality();
building.printColor();
building.paint("bright red");
building.printColor();
building.printFactoryOutput();
有没有一种方法可以实现这一点,也许是通过在超类中添加一个“isFactory”标志。
谢谢。
【问题讨论】:
-
您可以通过简单的
if(building instanceof Factory)检查来实现它。但是,您尝试做的事情不会被认为是好的设计。 -
我看到了@Kayaman,就像这样:
if(building instanceof Factory){ SturdyFactoryBuilding sfb = (SturdyFactoryBuilding) building; sfb.printFactoryOutput(); }我可以看出这不是一个好的设计,因为我仍然需要向下转换到特定的子类。有没有更好的方法来解决这个问题? -
您可以将
printFactoryOutput添加到Building,为其提供一个NOOP 默认实现。工厂会覆盖该默认值。一种适配器方法。
标签: java inheritance subclass superclass implements