Have a look at this example:
class Parent{
Child child = new Child();
Random r = new Random();
}
class Child{
public Child(){
//access a me
Have the Parent class pass its own instance of Random to the Child class.
class Parent{
Child child;
Random r = new Random();
public Parent()
{
child = new Child(r);
}
}
class Child{
public Child(Random r){
}
}
Classic Occam's razor.
It may be the case that if only your Parent class ever creates instances of Child, for its own internal use, then you could use inner classes, like so:
class Parent {
Random r = new Random();
Child child = new Child();
private class Child {
Child() {
Parent.this.r; // Parent's instance of Random
}
}
}
There are other reasons why you may want to use inner classes. But, I'm hesitant to suggest them, because requiring access to another class's instance variables is generally not a good practise.
Yes, If it is static method , you can do that (Random.methodName()).
If it is an instance method, A big Noooooo. You definitely need
Random instance.
First of all your example doesn't demonstrate parent child relationship in java.
Its only a class using another type reference.
in this particular case you can only do new Parent().r //depending upon r's visibility.
or you can pass the Parent reference to Child (by changing Child's constructor).
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();
}
}
In actual inheritance you don't need to do anything, the super class's members are inherited by extending classes. (again available in child class based on their visibility)
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
}
}
more at : http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html