Java - 类实例化和访问的基础知识

时间:2012-02-16 20:59:06

标签: java class instantiation

这是一个非常基本的问题,但我非常想解释为什么我的问题能够或不能实现。

如果我有一个类(A),其中包含一个字符串,并带有该字符串的set方法。我从第一个类(A)实例化另一个类(B),为什么我不能从新类(B)访问第一个类(A)来为第一个类中的字符串调用set方法(A )。

我问的唯一原因是我正在处理一个类似问题的项目,从主类我创建一个返回一些按钮的新类。当单击一个按钮时,主类中的ActionListener应该更改初始类中的String,但是我似乎无法在不重新实例化类的情况下访问原始类的set方法。

很抱歉,如果这听起来很混乱,但我真的想了解为什么这是一个问题,以及正确的做法是什么。我知道我可能会对此感到失望,但感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

因为B类需要保存已创建它的A实例的引用。默认情况下没有正式的理由。例如:

public class B {

    private final A creator; 

    public B(A creator) {
        // you might want to check for non null A
        this.creator = creator;
    }

    public void foo(String value) {
        creator.setText(value);
    }
}

答案 1 :(得分:1)

不知道它是否是最优雅的解决方案,但是如果你想让B类的对象引用A类对象(创建者),你可以使用Alessandro类(B)的示例代码和类似这样的东西在A班:

public class A
{
    private String text;

    public void createB()
    {
        new B(this);
    }

    public void setText(String b)
    {
        text = b;
    }
}

答案 2 :(得分:0)

除非被Class引用,否则无法调用

Object。所以你必须在B组中创建这样的东西

myobject = FirstClass.new  //I am not sure about java syntax as its been many years.

然后你可以在这个对象上调用FirstClass的所有方法,并在SecondClass中使用它们。

答案 3 :(得分:0)

如果B扩展A,则可以调用B中与A有关的公共方法。

如果B没有扩展A,则它不知道A的方法。这就是Java的继承工作方式。