我有 2 个类(class)。我们称它们为 A 类和 B 类。A 类包含一个执行某些操作的方法。 B 类用它自己的版本覆盖了这个方法,但确实生成了一个 super
调用类 A 中的该方法来执行操作。现在,这工作正常。但是,A 类中的某些操作只有在对象仅 是 A 类的实例时才应执行。换句话说,如果对象是 A 类的实例,A 类方法中的某些操作不应发生A 类的子实例。
目前,我正在使用 instanceof
检查每个 child ,但我需要指定每个子类,因此如果以后添加新的 child ,则需要更新此方法。我想要的是一种确定对象是否为子类的动态方法。
有没有好的替代品,或者是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
中调用 protected 方法只生成必要的信息。
最佳答案
创建 protected 方法来执行类特定的事情,并从 someMethod() 调用它们。 A 类将提供其实现,如果子类需要有效地删除该代码,则它可以使用空实现覆盖 protected 方法。
不要对抗多态性;充分利用它。
例子:
public class A {
protected void someOtherMethod() {
// Do stuff specific to A here.
}
public void someMethod() {
// Do some stuff
someOtherMethod();
// Do some more stuff
}
}
public class B extends A {
@Override
protected void someOtherMethod() {
// Empty implementation; B doesn't need to do this.
// Or do stuff specific to B...
}
}
关于java - 检查调用对象是否是子类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6795442/