簡體   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