【问题标题】:What class has access to my methods?什么类可以访问我的方法?
【发布时间】:2014-11-04 22:58:32
【问题描述】:

我今天的问题是关于创建一个对象,以及其他哪些类可以访问它的方法。我正在尝试学习线程,但由于 JPanel 不支持线程,所以我很困惑。

我创建了一个这样的简化类:

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

【问题讨论】:

  • 如果您的嵌套 MyClass 是非静态的,那么 MyClass 的实例将引用外部类的 this。所以在这种情况下,是的,它可以访问其父级的实例方法。

标签: java object methods nested


【解决方案1】:

MyClass 将无法访问MyMethodClass 中的方法,除非它创建了一个实例,在这种情况下,这是一个坏主意。

您可以通过 MyClass 的构造函数或 setter 方法将 MyMethodClass 的实例传递给 MyClass,但实际上最好使用通用接口,这样可以将两个类解耦并提高其可重用性

首先定义两个类之间的契约(作为接口)...

public interface SomeMethods {
    public void MyMethod();
}

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

【讨论】:

    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多