如何在java中获取变量的父类?

时间:2014-05-07 15:58:16

标签: java

假设我有一个班级a和一个班级。

public class ClassA{
    int a;
    ClassB b = new ClassB();
}    
public class ClassB{
    int someInt;
    void someFunction(){
        //Here I want to access the variable a of the current ClassA.
    }
}`

代码非常自我解释。 我可以在构造函数中添加ClassA,但我不想这样做,因为ClassB将由用户创建。 所以...也许在这里有所帮助?

4 个答案:

答案 0 :(得分:4)

根据您当前的设计,ClassBClassA的存在一无所知。你需要:

  • 建立从ClassBClassA的直接关联。通常你是通过一个字段来完成的。
  • ClassA的引用分配到ClassB

这是一种方法:

public class ClassA {
    int a;
    ClassB b = new ClassB(this);
}

public class ClassB {
    int someInt;
    ClassA classA;
    public ClassB(ClassA classA) {
        this.classA = classA;
    }
    void someFunction() {
        System.out.println(classA.a);
    }
}

以下是另一种方法:

public class ClassA {
    int a;
    ClassB b;
    public ClassA() {
        b = new ClassB();
        b.setClassA(this);
    }
}

public class ClassB {
    int someInt;
    ClassA classA;
    public ClassB() {
    }
    void setClassA(ClassA classA) {
        this.classA = classA;
    }
    void someFunction() {
        System.out.println(classA.a);
    }
}

答案 1 :(得分:1)

更改以下代码

 public class ClassA{
        int a;
        ClassB b = new ClassB();
        public void m1(){
         b.someFunction(a)
    }
    }    
    public class ClassB{
        int someInt;
        void someFunction(int a){
            //Here I want to access the variable a of the current ClassA.
        }
    }`

答案 2 :(得分:0)

如果B类的实例需要引用拥有或以其他方式引用B类实例的对象,则B的开发人员必须为A实例实现setter方法(或提供构造函数参数)。您无法强制B类开发人员这样做,除非B类适合包含A类的某个框架。如果是这种情况,您可以提供B必须实现的接口并通过该接口强制实现A的实例的setter。

答案 3 :(得分:0)

如果您想要访问classA的成员,那么您将 将该类的实例传递到someFunction方法中,或者通过{{{}的构造函数传递1}}或作为方法的参数,即

classB

或者您可以// Via constructor public class ClassB { private ClassA a; public ClassB( ClassA a ) { this.a = a; } public void someFunction() { System.out.println( a.a ); } } // Via method public class ClassB { public void someFunction( ClassA a ) { System.out.println( a.a ); } } 成为a成员ClassA,但我不认为这就是您所追求的目标。