繁体   English   中英

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

[英]How to call the abstract method from a class which is not in hierarchy in java

下面是我的代码。 我有一个抽象类Myabatract ,它具有方法myMethod并且我有一个子类MySubClass ,其中重写了myMethod 在我的客户端类中,我有一个方法callMethod ,我想直接从其中调用Myabatract类的myMethod ,这可能吗?

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(){

}
}

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

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

    instance.myMethod();
  }
}

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

需要注意的是这不会工作是非常重要的:

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

    instance.myMethod();
  }
}

super是非匿名类MySubClass ,这意味着实际上没有任何更改。 有趣的是,可以使用范围解析运算符( :: :)在C ++中解决此问题。

另外值得指出的是,你在呼唤super.myMethod()在你的实现MySubClass ,它不调用Myabatract方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM