簡體   English   中英

從實例調用父方法

[英]Call parent method from an instance

我正在看這個主題: 導入的子類中的Java Access父方法

但是我仍然不確定我要做什么的正確術語。
我有一個Test實例,我想從創建該實例的“父級”中調用一個方法。

public class Main {
    public Main {
        Test test1 = new Test();
    }

    public void showMessage(String message) {
        System.out.println(message);
    }
}

public class Test {
    public Test {
        //how do I call Main.showMessage("test is running")?
    }
}

我在上面列出的主題中的答案是:

假設“父”是您要擴展的類,並且您調用的方法不是靜態的,則應使用以下方法:

super.toggleVisibility();

如果是靜態方法-甚至更簡單:

Main.showMessage();

問題:
我很確定我不能使用super()因為我沒有擴展類。 而且我不確定Main.showMessage(); 之所以可以工作,是因為我沒有在Test類中引用父Main

創建所需類的實例並調用所需方法:

public class Test {
    public Test() {
        //how do I call Main.showMessage("test is running")?
        Main main = new Main();
        main.showMessage("test is running");
    }
}

正如@BrianRoach指出,由當前的代碼,這將產生的StackOverflowError,因為它是一個無限循環( Main實例創建一個Test中它的構造函數創建一個實例Test中它的構造情況下...)

因此,另一個選擇可能是將Main類實例傳遞給Test構造函數:

public class Test {
    public Test(Main main) {
        main.showMessage("test is running");
    }
}

然后,在Main構造函數中:

public Main() {
    Test test1 = new Test(this);
}

您可以將Main的實例傳遞給Test,然后使用一個接口來幫助解耦:

public class Main implements Parent {
   public Main() {
       Test2 test2 = new Test2(this);
   }

   public void showMessage(String message) {
       System.out.println(message);
   }

   public static void main(String[] args) {
      new Main();
   }
}

interface Parent {
   void showMessage(String message);
}

class Test2 {
   public Test2(Parent parent) {
       parent.showMessage("I am running from in Test");
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM