假设我们有一个超类,如
public class Superclass
{
public void method1() {
// do something
}
}// end Superclass
和一个子类,如
public class Subclass extends Superclass
{
public void method1() {
//override method1() of Superclass
}
public void method2() {
// bla bla bla
}
}// end Subclass
现在考虑以下代码
public static void main( String[] args ) {
Superclass obj = new Subclass();
}
我正在寻找一种通过变量obj调用method2()的方法。有没有办法做到这一点?如果是这样,该如何完成这项任务?
答案 0 :(得分:4)
正如上面的评论所指出的,如果你需要这样做,可能表明你的课程没有正确建模。
通常更好的方法是在超类型中提供默认实现,只需让子类型覆盖实现。
例如:
public class Superclass {
public void method1() {
// method1 implementation
}
public void method2() {} // empty implementation
}
public class Subclass extends Superclass {
@Override
public void method2() {
// do subclass stuff
}
}
然后在您的通话网站上,您只需要这样做:
Superclass obj = new Subclass();
// Since the runtime type is Subclass, this calls Subclass's
// implementation of method2
obj.method2();
答案 1 :(得分:2)
要这样做,你必须将其转换为SubClass
:
((Subclass) obj).method2();