[英]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.