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
实例,它会工作的。