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