如何从java中不在层次结构中的类调用抽象方法

时间:2014-06-08 02:30:21

标签: java oop abstract-class

以下是我的代码。我有一个抽象类Myabatract,它有方法myMethod,我有一个子类MySubClass,我在其中覆盖了myMethod。在我的客户端类中 我有一个方法callMethod,我希望直接调用myMethod类的Myabatract这可能吗?

abstract class Myabatract {

public void myMethod() {
    System.out.println("This is from Myabatract");
}

}

class MySubClass extends Myabatract  {
public void myMethod() {
    System.out.println("This is from MySubClass");
    super.myMethod();
}
}


class Client{
public void callMethod(){

}
}

1 个答案:

答案 0 :(得分:2)

您可以创建abstract class的匿名实现。鉴于它不使用任何abstract方法,这一点特别容易。

class Client {
  public void callMethod() {
    Myabatract instance = new Myabatract() { /* nothing to implement*/ };

    instance.myMethod();
  }
}

作为MySubClass类型的用户,您无法调用Myabatract方法,因为它已被覆盖,除非MySubClass要公开它。您唯一的办法是创建另一种方法,从super(或其他子实现)中公开MySubClass方法。

重要的是要注意,这将工作:

class Client {
  public void callMethod() {
    MySubClass instance = new MySubClass() {
      @Override
      public void myMethod() {
        super.myMethod();
      }
    };

    instance.myMethod();
  }
}

super是非匿名类MySubClass,这意味着什么都没有实际改变。有趣的是,这可以使用范围解析运算符(::)在C ++中解决。

还值得指出的是,您在super.myMethod()的实施中调用了MySubClass,它会调用Myabatract方法。