我有四节课。 A,B,D是派生类,C是基类。如果给定的实例是A或D,则返回true;否则,返回false。以下是我的代码:
//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 ++,如果在不同的文件中定义了四个类,如果我这样做,我必须在文件中包含定义类A和D的头文件,提供C类的实现,这有点奇怪)。
我知道我可以在每个派生类中提供覆盖功能。但是它是否有重复的代码,特别是如果我有很多派生类。
有人能给我一些建议吗?
由于
答案 0 :(得分:4)
您应该覆盖子类中的isSupported
,以便A
和D
覆盖它以返回true
,C
定义默认行为(返回{{ 1}})和false
从B
继承该默认行为而不覆盖。
C
答案 1 :(得分:2)
基类应该永远不需要知道有关扩展它的类的任何信息。否则,在扩展它时需要修改基类。我会认为非常糟糕的风格(换句话说,它“闻起来” - 不,这不是侮辱 - 见“code smell”)。
为什么你需要这样做?