如何在Java中访问对象的父对象?

时间:2014-06-05 10:07:24

标签: java oop

看一下这个例子:

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对象?

4 个答案:

答案 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
        }
    }
}

您可能还想使用内部类的其他原因。但是,我对建议它们犹豫不决,因为要求访问另一个类的实例变量通常不是一个好习惯。