com*_*uru 4 java oop polymorphism inheritance
我有2节课.我们称它们为A类和B类.A类包含一个执行某些动作的方法.B类使用自己的版本覆盖此方法,但会super在A类中调用该方法来执行操作.现在,这工作正常.但是,在A类中有一些操作只应在对象只是 A类的实例时执行.换句话说,如果对象是Class的子实例,则不应该发生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
}
}
Run Code Online (Sandbox Code Playgroud)
就像对设计的解释一样,我用它来生成XML.在程序中,我有一个List<A>存储数据.当需要输出XML时,我遍历列表并调用generateXML(someMethod在我的示例中取代它).
创建A类对象时,需要在<A></A>标记中包含其数据.创建B类对象时,需要在<B></B>标记中包含其数据.但是所有的属性A也必须在<B></B>标记内部,所以现在它调用的generateXML对象只有一个对象时才使用A
但正如其他一些人所指出的那样,调用同样的方法并不是可行的方法.类B应该在类A中调用受保护的方法,该方法仅生成必要的信息.
创建执行特定于类的事物的受保护方法,并从someMethod()调用它们.A类将提供其执行情况,如果一个子类需要有效地去除该代码,那么就可以用空的实现覆盖保护的方法.
不要打多态; 使用它对你有利.
例:
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...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10093 次 |
| 最近记录: |