0

so i have outerClass and innerClass, and i want to access the object created from innerClass using outerClass, example:

public Class outerClass{
    Class innerClass{
        //properties
    }
}

so what i want to do is something like this:

public class Main {
    public static void main(String [] args) {
        outerClass outerObj = new outerClass();
        outerClass.innerClass innerObj = outerObj.new innerClass();

        //this is what i want:
        outerObj.innerObj;
    }
}

it might be complicated but what i want to do is get the innerObject, using only outerObject

4

4 回答 4

3

这会起作用:

public class outerClass{
    public static class innerClass{
        //properties
    }
}
于 2016-03-11T12:45:43.643 回答
1
public Class outerClass{
    Class innerClass{
        //properties
    }

    public innerClass innerObj;
}

outerObj.innerObj = outerClass.new innerClass();
于 2016-03-11T12:47:23.540 回答
1

对于非静态内部类,编译器会自动添加对“所有者”对象实例的隐藏引用。当您尝试从静态方法(例如 main 方法)创建它时,没有拥有实例。这就像试图从静态方法调用实例方法一样——编译器不允许这样做,因为您实际上没有要调用的实例。

因此内部类本身必须是静态的(在这种情况下不需要拥有实例),或者您只能从非静态上下文中创建内部类实例。

所以让你的innerClassstatic

public static class innerClass{
        //properties
    }

你可以打电话

outerClass.innerClass innerObj = new outerClass.innerClass();

如果您只想通过点(。)符号访问字段,应考虑使用

outerClass 中的静态内部字段,例如 System 类中的 PrintStream

例子:

public class outerClass{
    public static innerClass innerObject = new innerClass();
    static  class  innerClass{
            //properties
        }
    }

然后在 main 方法中

outerClass outerClass= new outerClass();
        outerClass.innerObject.yourfied
于 2016-03-11T12:50:13.777 回答
1
outerClass.innerClass innerObj = outerObj.new innerClass();

innerObj是一个局部变量。您可以直接将其称为

innerObj
于 2016-03-11T12:48:56.060 回答