Java 从静态方法实例化非静态内部类
我遇到了问题所描述的情况。Java 从静态方法实例化非静态内部类,java,oop,static,Java,Oop,Static,我遇到了问题所描述的情况。 找到解决办法了但是!! 仍然无法理解为什么不能从静态方法实例化非静态内部类,但是可以,如果非静态类写在单独的文件中(即不作为内部类)它与InstanceInteger或静态方法中的任何其他类相同。作用域是本地的,因此是允许的。它与InstanceInteger或静态方法中的任何其他类相同。作用域是局部的,因此是允许的。内部类具有特殊的特性。其中一个是从甲骨文中摘取的 InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访问其封闭实例的方法和字
找到解决办法了
但是!!
仍然无法理解为什么不能从静态方法实例化非静态内部类,但是可以,如果非静态类写在单独的文件中(即不作为内部类)它与InstanceInteger或静态方法中的任何其他类相同。作用域是本地的,因此是允许的。它与InstanceInteger或静态方法中的任何其他类相同。作用域是局部的,因此是允许的。内部类具有特殊的特性。其中一个是从甲骨文中摘取的 InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访问其封闭实例的方法和字段
静态嵌套类和它们自己的java文件中的类不像内部类那样依赖于外部对象,因此您可以创建一个新类,而不需要封闭类的实例。内部类具有特殊的特性。其中一个是从甲骨文中摘取的 InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访问其封闭实例的方法和字段
静态嵌套类及其自身java文件中的类与内部类不依赖外部对象,因此您可以创建一个新类,而不需要封闭类的实例。因为非静态内部类的实例包含对其所有者对象的引用(创建它的外部类的实例)。
static
方法没有关联的外部对象,因此它无法创建内部对象,因为没有外部对象可以提供它
class Outer {
Object somethingInTheOuterObject;
class Inner {
// Secretly holds a reference to its outer.
void f() {
// Can access my enclosing instance objects.
Object o = somethingInTheOuterObject;
}
}
}
static void f() {
// Cannot do this.
new Outer.Inner();
// Can do this.
Outer outer = new Outer();
// Can do this.
Outer.Inner inner = outer.new Inner();
// Can even do this.
Outer.Inner inner1 = new Outer().new Inner();
}
因为非静态内部类的实例包含对其所有者对象(创建它的外部类的实例)的引用。
static
方法没有关联的外部对象,所以它无法创建内部对象,因为没有外部对象可以给它
class Outer {
Object somethingInTheOuterObject;
class Inner {
// Secretly holds a reference to its outer.
void f() {
// Can access my enclosing instance objects.
Object o = somethingInTheOuterObject;
}
}
}
static void f() {
// Cannot do this.
new Outer.Inner();
// Can do this.
Outer outer = new Outer();
// Can do this.
Outer.Inner inner = outer.new Inner();
// Can even do this.
Outer.Inner inner1 = new Outer().new Inner();
}