【发布时间】:2015-03-21 19:27:03
【问题描述】:
我有四门课。 A,B,D 是派生类,C 是基类。如果给定的实例是 A 或 D,则返回 true;否则,返回假。以下是我的代码:
//A.java
public class A extends C{
}
//B.java
public class B extends C {
}
//D.java
public class D extends C {
}
//C.java
public class C {
public boolean isSupported(C object){
boolean result= false;
// Object type check
if(object instanceof A || object instanceof D){ // A, D
result=true;
}
else { // B, C
result=false;
}
return result;
}
public static void main(String args[]){
C tmp = new A();
System.out.println(tmp.isSupported());
}
}
那么在基类 C 的 isSupported() 中检查实例/对象类型是一个好习惯吗? (对于 C++,如果在不同的文件中定义了四个类,如果这样做,我必须在提供 C 类实现的文件中包含定义 A 类和 D 类的头文件,这有点奇怪)。
我知道我可以在每个派生类中提供一个覆盖函数。但它是不是有点重复代码,特别是如果我有很多派生类。
谁能给我一些建议?
谢谢
【问题讨论】:
-
这个设计很糟糕。如果 B 不受“支持”,则 B 不应是 C 的基类。