Почему мы не можем объявить частный локальный внутренний класс внутри метода?

#java #class

#java #класс

Вопрос:

 class outer
{
    public void outerfunction()
    {

        private class inner // Line-1
        {
                public void showinner()
                {
                    System.out.println("I am in Inner Class");

                }

        }

    }
}
  

Строка-1: эта строка выдает ошибку.

Я знаю, пишу ли я abstract или Final для класса inner. тогда все в порядке. Почему класс inner не может быть закрытым?

Ответ №1:

private Класс виден всем методам и вложенным классам в одном файле. Обычно вы считаете, что private сужает область использования, но в этом случае, используя private вы, расширяете область where is класс виден так, как Java не поддерживает.

Сделать метод закрытым — это то же самое, что и сделать это

 class outer {
      private class inner { // Line-1
          public void showinner() {
              System.out.println("I am in Inner Class");    
          }
      }

      public void outerfunction() {    

     }
}
  

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

 class outer {
    public void printInner() {
        // accessible in the same .java file because we made it private
        inner i = new inner();
        i.showInner(); // what should `x` be?
    }

    public void outerfunction(final int x) {    
         private class inner { // Line-1
              public void showinner() {
                  System.out.println("I am in Inner Class, x= "   x);    
              }
          }    
    }
}
  

Комментарии:

1. Не могли бы вы объяснить немного больше? Спасибо!

2. метод @ShashankJain локальные классы в методе видны только этому методу, а не все в том же файле, private что и вложенные классы.

3. Тогда почему разрешено Final ?

4. final является более строгим. Это означает, что он не может быть подклассом.

5. final делает его не наследуемым