如何通过java中的超类实例调用子类方法?

时间:2015-11-26 23:18:35

标签: java

假设我们有一个超类,如

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()的方法。有没有办法做到这一点?如果是这样,该如何完成这项任务?

2 个答案:

答案 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();