我今天的问题是关于创建一个对象,以及其他哪些类可以访问它的方法。我正在尝试了解线程,但由于JPanels不支持线程,我已经感到困惑。
我创建了一个这样的简化类:
public class MyMethodClass {
public MyMethodClass () {
MyClass myClass = new MyClass();
}
public void MyMethod() {
//do something with the variables
}
}
所以我现在有了一个名为myClass的新类对象(MyClass是另一个类,其内容并不重要)。由于它们都是公开的,myClass
是否可以访问MyMethod
?
如果没有,有没有办法将副本MyMethodClass
传递给myClass
,以便它可以使用myMethod
,知道MyMethodClass
已创建myClass
第一名?
如果类MyClass
是嵌套类,它是否可以访问MyMethod
?
答案 0 :(得分:1)
MyClass
将无法访问MyMethodClass
中的方法,除非它创建了它的实例,在这种情况下,这是一个坏主意。
您可以通过其构造函数或setter方法传递MyClass
MyMethodClass
的实例,但实际上您更好地使用通用接口,这将解耦这两个类并提高其可重用性
首先定义两个类之间的契约(作为接口)......
public interface SomeMethods {
public void MyMethod();
}
添加通过它的构造函数或setter方法将SomeMethods
的实现传递给MyClass
的功能......
public class MyClass {
private SomeMethods someMethods;
public MyClass(SomeMethods someMethods) {
this.someMethods = someMethods;
}
public void someWork() {
someMethods.MyMethod();
}
}
让MyMethodClass
实施SomeMethods
界面并将自己的引用传递给MyClass
public MyMethodsClass implements SomeMethods {
public MyMethodClass () {
MyClass myClass = new MyClass(this);
}
@Override
public void MyMethod() {
//do something with the variables
}
}
请注意,将this
传递给构造函数中的其他类或方法通常不是一个好主意,因为对象的状态可能无法完全实现,并且某些值是方法/类所依赖的可能尚未初始化。