Почему вы можете создать экземпляр статического вложенного класса? - PullRequest
0 голосов
/ 11 января 2019

Насколько мне известно, обычно в Java что-то статичное означает, что вы не можете создать его экземпляр. Но если это так, почему вы можете создать экземпляр статического вложенного класса? Разве это не противоречит цели чего-то статичного?

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Насколько мне известно, обычно в Java что-то статичное означает, что вы не можете создать его экземпляр.

Это не правильно. static больше "относится не к какому-либо конкретному экземпляру, а к самому типу / классу" .

Представьте себе статический класс в контексте включающего класса . Статический класс является членом static, что означает, что вложенный класс не привязан к какому-либо конкретному экземпляру включающего класса.
Следствием этого является то, что вы можете создать экземпляр вложенного класса без необходимости сначала создавать экземпляр внешнего класса.

0 голосов
/ 11 января 2019

Представьте себе ситуацию, когда у вас есть метод в вашем вложенном статическом классе, и вы хотите вызвать этот метод.

См. Этот фрагмент ниже:

class OuterClass 
{  

    // static nested class 
    static class StaticNestedClass 
    { 
        void display() 
        { 
            System.out.println("Static Nested Class Display Method");
        } 
    } 

    static void display()
    {
        System.out.println("Outer Class Display Method");
    }

    public static void main(String[] args) 
    { 
        // accessing a static nested class 
        OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); 

        nestedObject.display(); // This calls the display() method of the static nested class
        OuterClass.display(); // This calls the display() method of outer class

    } 
} 

Как вы будете обращаться к display () статического вложенного класса, не создавая его объекта. Java позволяет создать экземпляр статического вложенного класса, чтобы мы могли получить доступ к методам, определенным в этом классе.

Надеюсь, это поможет !!!

0 голосов
/ 11 января 2019

что-то статичное означает, что вы не можете создать его экземпляр.

Это не правда. Вы не только не можете создавать экземпляры статических полей, вы также не можете создавать экземпляры нестатических полей, потому что это поле , а не класс.

static просто означает, что вам не нужно создавать экземпляр окружающего класса для доступа к нему. static члены принадлежат самому классу , а не экземплярам этого класса.

С этим определением статические классы имеют смысл.

Экземпляры статических классов могут быть созданы без создания экземпляров их внешнего класса:

class Outer {
    static class Inner {}
}

Outer.Inner obj = new Outer.Inner(); // no Outer instances created!

В то время как экземпляры нестатических внутренних классов не могут:

class Inner {
    class Outer {

    }
}

Inner inner = new Inner(); // I have to create this instance, otherwise it wouldn't compile
Inner.Outer outer = inner.new Outer();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...