Java 在外部类中创建内部类对象成员后,如何访问该内部类对象成员
想象一下下面提到的场景-Java 在外部类中创建内部类对象成员后,如何访问该内部类对象成员,java,inner-classes,Java,Inner Classes,想象一下下面提到的场景- public class TestMain { private int outerData = 30; class InnerFirst{ private int data1 = 40; public int getData() { return data1; } public void setData(int data) { this
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();
}
}
我的目的是将newClass对象设置为会话,并在需要时访问它。但是我如何访问data1(内部类实例变量)呢?
据我所知,newInnerClass对象(InnerFirst的对象)是在newClass实例(外部类)中创建的。我的问题是,如何从外部类对象引用访问内部类实例成员?您可以始终将这些子类的实例变量保留在父类中,并且在创建子类的对象时,可以在子类的构造函数中初始化同一类的实例变量。这样:对于第二个类,您可以做同样的事情:您可以使用这个实例变量从子类中获取每个字段
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();
}
}内部类实例有一个对其外部类实例的隐式引用(允许它访问外部类成员),但反之则不正确。外部类实例不保留对所创建的所有内部类实例的任何引用。除非您显式地拥有一个并初始化它。