在 java 的 3 class 秒内调用另一个 class 的方法
Call a method in another class within 3 classes in java
我有 3 个 classes 在一个包裹里。第一个 class (ClassStart
) 生成另外两个 classes(ClassA
和 ClassB
)的每个实例。我想通过其实例 "a".
在 ClassB
中调用 ClassA
的方法
尽管实例 "a" 的范围是包(由于 ClassStart
中的属性 "ClassA a;"
,行 "a.showText()"
不起作用。它得到错误消息 "a cannot resolved"
.
所以我尝试了 "s.a.showText()"
但它不起作用,因为实例 "s" 是在静态方法中生成的,我不知道如何访问 "s".
第一个class(包含主要方法):
public class ClassStart {
ClassA a;
public static void main(String[] args) {
ClassStart s = new ClassStart();
}
public ClassStart() {
a = new ClassA();
ClassB b = new ClassB();
}
}
第二个class:
public class ClassA {
public void showText() {
System.out.println("This text comes from ClassA.");
}
}
第三个class:
public class ClassB {
public ClassB() {
a.showText();
}
}
如何在ClassB中调用ClassA的方法"showText()"?
(我曾在这个论坛中寻找答案,但我没有找到像这样的三个 class 问题的答案。)谢谢你的回答。
如果ClassA对象需要始终相同,则传入B:
public class ClassB {
private ClassA a;
// pass the ClassA reference into the ClassB constructor
public ClassB(ClassA a) {
this.a = a; // assign it to the a field
// a.showText(); // or you can do this if you need it called in the constructor
}
// or do this if you want the a method called in a ClassB method.
public void callAShowText() {
a.showText();
}
}
然后:
public class ClassStart {
ClassA a;
public static void main(String[] args) {
ClassStart s = new ClassStart();
}
public ClassStart() {
a = new ClassA(); // create your ClassA instance
ClassB b = new ClassB(a); // pass it into your ClassB instance
b.callAShowText();
}
}
这里理解的关键是理解引用类型和引用变量。您希望 ClassB 中的引用变量引用在 ClassStart 中创建的 ClassA 对象。一种方法是在其构造函数或 setter 方法中将对象传递给 ClassB。一旦你这样做了,ClassB 就会有它需要的引用,它可以调用实例上的任何 ClassA 方法。
请注意,您也可以 "solve" 通过创建和使用 public 静态 ClassA 变量或 public 静态 showText()
方法,但通常您会尝试避免这样做,因为虽然它在像这样的简单示例中可以正常工作,但它并不 "scale" 很好,这意味着如果在更大更复杂的程序中普遍使用,它将冒着增加复杂程序中潜在连接的风险,大大增加了错误的风险。正是出于这个原因,为了降低复杂性和减少连通性(减少耦合),创建了面向对象的编程。
使方法静态化:
public static void showText()
然后调用它:
ClassA.showText();
我有 3 个 classes 在一个包裹里。第一个 class (ClassStart
) 生成另外两个 classes(ClassA
和 ClassB
)的每个实例。我想通过其实例 "a".
在 ClassB
中调用 ClassA
的方法
尽管实例 "a" 的范围是包(由于 ClassStart
中的属性 "ClassA a;"
,行 "a.showText()"
不起作用。它得到错误消息 "a cannot resolved"
.
所以我尝试了 "s.a.showText()"
但它不起作用,因为实例 "s" 是在静态方法中生成的,我不知道如何访问 "s".
第一个class(包含主要方法):
public class ClassStart {
ClassA a;
public static void main(String[] args) {
ClassStart s = new ClassStart();
}
public ClassStart() {
a = new ClassA();
ClassB b = new ClassB();
}
}
第二个class:
public class ClassA {
public void showText() {
System.out.println("This text comes from ClassA.");
}
}
第三个class:
public class ClassB {
public ClassB() {
a.showText();
}
}
如何在ClassB中调用ClassA的方法"showText()"?
(我曾在这个论坛中寻找答案,但我没有找到像这样的三个 class 问题的答案。)谢谢你的回答。
如果ClassA对象需要始终相同,则传入B:
public class ClassB {
private ClassA a;
// pass the ClassA reference into the ClassB constructor
public ClassB(ClassA a) {
this.a = a; // assign it to the a field
// a.showText(); // or you can do this if you need it called in the constructor
}
// or do this if you want the a method called in a ClassB method.
public void callAShowText() {
a.showText();
}
}
然后:
public class ClassStart {
ClassA a;
public static void main(String[] args) {
ClassStart s = new ClassStart();
}
public ClassStart() {
a = new ClassA(); // create your ClassA instance
ClassB b = new ClassB(a); // pass it into your ClassB instance
b.callAShowText();
}
}
这里理解的关键是理解引用类型和引用变量。您希望 ClassB 中的引用变量引用在 ClassStart 中创建的 ClassA 对象。一种方法是在其构造函数或 setter 方法中将对象传递给 ClassB。一旦你这样做了,ClassB 就会有它需要的引用,它可以调用实例上的任何 ClassA 方法。
请注意,您也可以 "solve" 通过创建和使用 public 静态 ClassA 变量或 public 静态 showText()
方法,但通常您会尝试避免这样做,因为虽然它在像这样的简单示例中可以正常工作,但它并不 "scale" 很好,这意味着如果在更大更复杂的程序中普遍使用,它将冒着增加复杂程序中潜在连接的风险,大大增加了错误的风险。正是出于这个原因,为了降低复杂性和减少连通性(减少耦合),创建了面向对象的编程。
使方法静态化:
public static void showText()
然后调用它:
ClassA.showText();