Why instantiation of static nested class object is allowed?

前端 未结 3 1082
迷失自我
迷失自我 2020-12-08 20:42

I have started learning Java language for Android Application developement.

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

相关标签:
3条回答
  • 2020-12-08 21:12

    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?

    0 讨论(0)
  • 2020-12-08 21:14

    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 {
    
        }
    }
    
    0 讨论(0)
  • 2020-12-08 21:21

    check it, maybe it can help you Nested Classes

    0 讨论(0)
提交回复
热议问题