看一下这个例子:
class Parent{
Child child = new Child();
Random r = new Random();
}
class Child{
public Child(){
//access a method from Random r from here without creating a new Random()
}
}
如何从Child对象中访问Random对象?
答案 0 :(得分:7)
让Parent
类将自己的Random
实例传递给Child
类。
class Parent{
Child child;
Random r = new Random();
public Parent()
{
child = new Child(r);
}
}
class Child{
public Child(Random r){
}
}
经典奥卡姆剃刀。
答案 1 :(得分:3)
首先,您的示例未演示java中的父子关系。
它只是一个使用其他类型引用的类。
在这种特殊情况下,你只能根据r的可见性做新的Parent()。r //。
或者您可以将Parent引用传递给Child(通过更改Child的构造函数)。
class Parent{
Child child = new Child(this);
Random r = new Random();
}
class Child {
public Child(Parent p){
//access a method from Random r from here without creating a new Random()
p.r.nextBoolean();
}
}
在实际继承中,您不需要执行任何操作,超类的成员通过扩展类继承。 (根据他们的知名度再次在儿童班中提供)
class Parent{
Child child = new Child();
Random r = new Random();
}
class Child extends Parent{
public Child(){
//access a method from Random r from here without creating a new Random()
super.r.nextBoolean();
//or even r.nextBoolean will be same in this case
}
}
更多信息:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
答案 2 :(得分:2)
是,如果是静态方法,则可以执行此操作(Random.methodName()
)。
如果是实例方法,大Noooooo 。你绝对需要
Random
实例。
答案 3 :(得分:2)
可能的情况是,如果只有你的Parent
类创建了Child
的实例,为了它自己的内部使用,那么你可以使用内部类,如下所示:
class Parent {
Random r = new Random();
Child child = new Child();
private class Child {
Child() {
Parent.this.r; // Parent's instance of Random
}
}
}
您可能还想使用内部类的其他原因。但是,我对建议它们犹豫不决,因为要求访问另一个类的实例变量通常不是一个好习惯。