如何在外部类中创建内部类对象成员后访问该对象成员



想象一下下面提到的场景 -

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();
}

}

最新更新