哪个类可以访问我的方法?

时间:2014-11-04 22:58:33

标签: java object methods nested

我今天的问题是关于创建一个对象,以及其他哪些类可以访问它的方法。我正在尝试了解线程,但由于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

1 个答案:

答案 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传递给构造函数中的其他类或方法通常不是一个好主意,因为对象的状态可能无法完全实现,并且某些值是方法/类所依赖的可能尚未初始化。