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

如何在java中获取变量的父类?,java,Java,假设我有一个甲级和一个乙级 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. } }` 这段代码很容易解释。 我可以在构造函数中添加Clas

假设我有一个甲级和一个乙级

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将由用户创建。
所以…也许有一些帮助?

对于您当前的设计,
ClassB
ClassA
的存在一无所知。您需要:

  • 建立从
    ClassB
    ClassA
    的直接关联。通常通过一个字段来完成
  • 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);
    }
}
下面是另一种方法:

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);
    }
}

更改代码,如下所示

 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.
        }
    }`

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

如果您想访问
classA
的成员,那么您将拥有将该类的实例传递到
someFunction
方法中,通过
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
a
a
static
中的
a
成员,但我认为这不是你想要的。

b
不扩展
a
,也不引用
a
。您真正想要实现什么?是的,但是ClassA有ClassB变量。我想访问ClassB的父级…或者任何被称为“这没什么”的东西,
ClassB
不知道
ClassA
。在您当前的设计中,
b
无法了解持有它的对象引用。从
ClassB
ClassA
没有关系,因此前者对后者一无所知。另一方面,
ClassA
知道它的成员,因此它知道它有一个引用
ClassB
的字段。这就是在这种情况下需要扣除的所有内容。如果你想要一个解决方案,你必须再次研究你的设计并想出一个替代方案。正如我所说的,我可以添加一个构造函数,但我不想这么做……还有其他方法吗?@JohnBrac补充道。有几种方法可以做到这一点。这是因为你修复了它:P