我不知道如何访问从该对象实例化对象的类。
清晰度示例:
public class A {
B b;
int number = 5;
public A() {
b = new B();
}
}
public class B {
public B() {
System.out.println(/*code to get the value of number*/);
}
}
我无法将number
传递给B
这在Java中是否可行?
答案 0 :(得分:4)
对象本身并不知道实例化的位置,不是。
也就是说,您可以在子对象中添加对实例化对象的引用。这在板实现中很有用,因此tile或space可以为邻居提供板对象等参考。
对于您的示例,如果所有B
都由相应的A
实例化,则可以修改类:
public class A {
B b;
int number = 5;
public A() {
b = new B(this);
}
}
public class B {
public final A instant;
public B(A a) {
instant = a;
System.out.println(a.number);
}
}
实现相同效果的另一种方法是,如果所有B都是在A
内构建的,那就是使B
成为非静态内部类。这将使每个B
访问其对应的A
的数字字段。
public class A {
B b;
int number = 5;
public A() {
b = new B(this);
}
class B {
public B() {
System.out.println(number); //Has access because it must be constructed within an A instance
}
}
}
这显然更清晰,但使B
内部类具有其他可能适用于您的项目的设计含义。
但是,如果你不知道实例化对象的类(如果它不总是A
),那么这些方法都不会起作用。在这种情况下,您可以做的最好的事情是使参数构造类型B
的{{1}}并根据需要进行转换以获取字段,或者使其具有共享行为的实例化类共享的某个接口必要。这是一个例子:
Object
答案 1 :(得分:0)
在像Java这样的面向对象语言中,首先需要提供基本上将所有属性设置为私有的封装,然后使用set来传递值,例如,如果要访问数字,则可以使用A usend关键字 extend 你也可以把属性号放在B类中然后你就可以做一些像a.getB()。setNumber()或getNumber()取决于你想要的getter用于读取值和setter用于设置值:
public class A {
B b;
private int number;
public A() {
b = new B();
}
public void setNumber(int number){
this.number=number;
}
public int getNumber(){
return number;
}
}
然后在B班
public class B extends A {
public class B(){
setNumber(100);
}
}
答案 2 :(得分:0)
public class A {
B b;
int number = 5;
public A() {
b = new B();
b.setNum(number);
}
}
public class B {
int number;
public B() {
System.out.println(number);
}
public void setNum(int n) {
number = n;
}
}