Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从实例调用父方法_Java - Fatal编程技术网

Java 从实例调用父方法

Java 从实例调用父方法,java,Java,我在看这个话题: 但我仍然不确定我要做什么的合适术语。 我有一个Test实例,我想从创建该实例的“父级”调用一个方法 public class Main { public Main { Test test1 = new Test(); } public void showMessage(String message) { System.out.println(message); } } public class Test {

我在看这个话题:

但我仍然不确定我要做什么的合适术语。
我有一个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所指出的,根据您当前的代码,这将生成StackOverflowerError,因为它是一个无限循环(
Main
实例,在其构造函数中创建
Test
实例,在其构造函数中创建
Test
实例…)

因此,另一个选项可能是将
Main
类实例传递给
Test
构造函数:

public class Test {
    public Test(Main main) {
        main.showMessage("test is running");
    }
}
public Main() {
    Test test1 = new Test(this);
}
然后,在
Main
constructor中:

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

您可以将Main的一个实例传递到测试中,我将使用一个接口来帮助解耦:

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");
   }
}

上面的代码中没有显示父子关系。好的,这是我问题的第一部分。当您在另一个类中创建一个类的实例时,它被称为什么。这种关系被称为什么?我认为您缺少了主构造函数中的参数列表(可能是空的)。那么您如何说从
Test
类调用
Main
方法呢?它没有调用父方法。它在调用一个________;方法?忽略语法错误,这将导致OP代码中的无限递归:-我认为这不起作用,因为您在
Test
类中创建了一个全新的
Main
实例,而不是调用创建
Test
实例的
Main
@BrianRoach注意到(哈哈,无限循环)。修复了答案。@Rawr-answer更新了。如果您没有在
Main
构造函数中创建
Test
实例,它会工作的。