Reputation: 15
Imagine the scenario as mentioned below -
public class TestMain {
private int outerData = 30;
class InnerFirst{
private int data1 = 40;
public int getData() {
return data1;
}
public void setData(int data) {
this.data1 = data;
}
void msg(){
System.out.println("Inner data is : "+data1+" and outer data is : "+outerData);
}
}
class InnerSecond{
private int data2 = 40;
public int getData() {
return data2;
}
public void setData(int data) {
this.data2 = data;
}
void msg(){
System.out.println("Inner data is : "+data2+" and outer data is : "+outerData);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestMain newClass = new TestMain();
TestMain.InnerFirst newInnerClass = newClass.new InnerFirst();
newInnerClass.setData(50);
newInnerClass.msg();
}
}
My intention is to set the newClass object into session and accessing it while required. But how can i access data1 (inner class instance variable) then? As far i understand newInnerClass object (object of InnerFirst) gets created inside newClass instance (outer class). My question is , how can i access innerclass instance member from outer class object reference?
Upvotes: 1
Views: 58
Reputation: 976
You can always keep instance variables of these subclasses in your parent class and when you create object of subclass then in the constructor of your subclass you can initialize the instance variable of same class. like this: For second class you can do self same thing: You can get eachfield from sub-class using this instance variable.
public class TestMain {
private InnerFirst first;
private InnerSecond second;
private int outerData = 30;
class InnerFirst{
private InnerFirst() {
first = this;
}
private int data1 = 40;
public int getData() {
return data1;
}
public void setData(int data) {
this.data1 = data;
}
void msg(){
System.out.println("Inner data is : "+data1+" and outer data is : "+outerData);
}
}
class InnerSecond{
private InnerSecond() {
second = this;
}
private int data2 = 40;
public int getData() {
return data2;
}
public void setData(int data) {
this.data2 = data;
}
void msg(){
System.out.println("Inner data is : "+data2+" and outer data is : "+outerData);
}
}
private InnerFirst getFirst() {
return first;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestMain newClass = new TestMain();
TestMain.InnerFirst newInnerClass = newClass.new InnerFirst();
System.out.println(newClass.getFirst().getData());
newInnerClass.setData(50);
newInnerClass.msg();
}
}
Upvotes: 1