静态嵌套类和非静态嵌套类的区别是什么?


当前回答

静态内部类:可以声明静态和非静态成员,但只能访问父类的静态成员。

非静态内部类:只能声明非静态成员,但可以访问父类的静态和非静态成员。

其他回答

Static inner class cannot access non-static members of enclosing class. It can directly access static members (instance field and methods) of enclosing class same like the procedural style of getting value without creating object. Static inner class can declare both static and non-static members. The static methods have access to static members of main class. However, it cannot access non-static inner class members. To access members of non-static inner class, it has to create object of non-static inner class. Non-static inner class cannot declare static field and static methods. It has to be declared in either static or top level types. You will get this error on doing so saying "static fields only be declared in static or top level types". Non-static inner class can access both static and non-static members of enclosing class in procedural style of getting value, but it cannot access members of static inner class. The enclosing class cannot access members of inner classes until it creates an object of inner classes. IF main class in accessing members of non-static class it can create object of non-static inner class. If main class in accessing members of static inner class it has two cases: Case 1: For static members, it can use class name of static inner class Case 2: For non-static members, it can create instance of static inner class.

静态内部类和非静态内部类之间有两个区别。

如果声明成员字段和方法,则是非静态的 内部类不能有静态字段和方法。 但是,在静态内部类的情况下,可以有静态和非静态字段 和方法。 非静态内部类的实例是使用引用创建的 对象的外部类,这意味着它已经定义 封闭的实例。但是静态内部类的实例是 创建时没有引用Outer类,这意味着它有引用 没有封闭实例。

请看这个例子

class A
{
    class B
    {
        // static int x; not allowed here
    }

    static class C
    {
        static int x; // allowed here
    }
}

class Test
{
    public static void main(String… str)
    {
        A a = new A();

        // Non-Static Inner Class
        // Requires enclosing instance
        A.B obj1 = a.new B(); 

        // Static Inner Class
        // No need for reference of object to the outer class
        A.C obj2 = new A.C(); 
    }
}

静态内部类:可以声明静态和非静态成员,但只能访问父类的静态成员。

非静态内部类:只能声明非静态成员,但可以访问父类的静态和非静态成员。

讨论嵌套类……

不同之处在于,同样是静态的嵌套类声明可以在外围类之外实例化。

当你有一个非静态的嵌套类声明时,Java不允许你实例化它,除非通过外围类。从内部类创建的对象被链接到从外部类创建的对象,因此内部类可以引用外部类的字段。

但如果它是静态的,则链接不存在,外部字段不能被访问(除非通过像任何其他对象一样的普通引用),因此您可以通过自身实例化嵌套类。

内部类不能是静态的,所以我将把你的问题重新定义为“静态嵌套类和非静态嵌套类之间的区别是什么?”

正如你在这里所说的,内部阶级不可能是静态的…我发现下面的代码是静态....原因?或者哪个是正确的....

是的,静态嵌套类型的语义中没有任何东西会阻止您这样做。这段代码运行正常。

    public class MultipleInner {
        static class Inner {
        }   
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Inner();
        }
    }
}

这是这个网站上的一个代码…

对于问题——>静态嵌套类可以实例化多次吗?

答案是——>

现在,当然嵌套类型可以做自己的实例控制(例如,私有构造函数,单例模式等),但这与它是嵌套类型的事实无关。此外,如果嵌套类型是静态enum,当然您根本不能实例化它。

但是一般来说,静态嵌套类型可以被实例化多次。

注意,从技术上讲,静态嵌套类型不是“内部”类型。