Why instantiation of static nested class object is allowed?

非 Y 不嫁゛ 提交于 2019-11-28 06:52:19

As per my understanding based on static class, we cannot instantiate object of static class.

Your understanding of the meaning of "static class" is incorrect. Basically a "static class" in Java is a nested class which doesn't have an implicit reference to an instance of the containing class. See section 8.5.1 of the JLS for more information, in particular:

The static keyword may modify the declaration of a member type C within the body of a non-inner class or interface T. Its effect is to declare that C is not an inner class. Just as a static method of T has no current instance of T in its body, C also has no current instance of T, nor does it have any lexically enclosing instances.

Perhaps you were thinking of static classes in C#, which are completely different?

Why we can create object of inner class if it is marked as static?

You may need to use a nested class in a static context, for example:

public class Test {

    public static void main(String args[]) {
        InnerClass innerClass = new InnerClass();
    }

    class InnerClass {

    }
}  

In this case, when you try to instantiate the innerClass you get the error:

No enclosing instance of type Test is accessible. Must qualify the allocation with an enclosing instance of type Test (e.g. x.new A() where x is an instance of Test).

To avoid this, you could instantiate an object of type Test and create an instance of innerClass from it:

Test test = new Test();
InnerClass innerClass = test.new InnerClass();

or better, declare also the innerClass as static and instantiate it in a static context:

public class Test {

    public static void main(String args[]) {
        InnerClass innerClass = new InnerClass();
    }

    static class InnerClass {

    }
}

check it, maybe it can help you Nested Classes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!