【发布时间】:2011-07-22 20:01:04
【问题描述】:
我有 2 节课。我们称它们为 A 类和 B 类。A 类包含一个执行某些操作的方法。 B 类用它自己的版本覆盖此方法,但确实在 A 类中对该方法进行了super 调用以执行操作。现在,这工作正常。但是,A 类中的某些动作只有在对象仅是 A 类的一个实例时才应该执行。换句话说,如果对象是A 类的子实例。
目前,我正在使用instanceof 来检查每个子类,但我需要指定每个子类,因此如果以后添加了新子类,则需要更新此方法。我想要的是一种确定对象是否是子类的动态方法。
有什么好的选择吗,或者instanceof 是要走的路吗?
public class A{
public void someMethod(){
// Only perform these actions if it is not a child class. This is what
// I am looking for a better solution for
if(!(this instanceof B)){
// Some action...
}
// Actions to execute for every call
}
}
public class B extends A{
@Override
public void someMethod(){
super.someMethod();
// More actions
}
}
作为对设计的解释,我使用它来生成 XML。在程序中,我有一个List<A> 来存储数据。当需要输出 XML 时,我会遍历列表并调用 generateXML(someMethod 在我的示例中代替它的位置)。
创建A类的对象时,需要将其数据包含在<A></A>标签内。创建 B 类对象时,需要将其数据包含在 <B></B> 标记中。但是A 的所有属性也必须在<B></B> 标记内,所以现在它调用相同的generateXML 方法,当对象仅属于A 类时使用。
但正如其他一些人指出的那样,调用相同的方法并不是要走的路。 B 类应该调用 A 类中的受保护方法,该方法只生成必要的信息。
【问题讨论】:
标签: java oop inheritance polymorphism