Как вызвать экземпляр класса, определенного внутри метода внешнего класса

#java

#java

Вопрос:

 class Outer{

    public void Method(){

    int i=10;
    System.out.println(i);
    Class InsideMethod{
        //
    }
}
  

Вопрос: Как я могу вызвать объект InsideMethod вне метода

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

1. Не могли бы вы привести пример?

Ответ №1:

Этот фрагмент иллюстрирует различные возможности:

 public class Outer {

  void onlyOuter() { System.out.println("111"); }
  void common() { System.out.println("222"); }

  public class Inner {
    void common() { System.out.println("333"); }
    void onlyInner() {
      System.out.println("444");// Output: "444"
      common();                 // Output: "333"
      Outer.this.common();      // Output: "222"
      onlyOuter();              // Output: "111"
    }
  }
}
  

Примечание:

  • Метод внутреннего класса скрывает метод внешнего класса с аналогичным именем. Следовательно, common(); вызов отправляет реализацию из внутреннего класса.
  • Использование OuterClass.this конструкции для указания того, что вы хотите отправить метод из внешнего класса (чтобы обойти скрытие)
  • Вызов onlyOuter() отправляет метод из OuterClass , поскольку это самый внутренний класс, который определяет этот метод.

Ответ №2:

Если я правильно понял, что вы хотите, вы могли бы сделать:

 OuterClass.this
  

Ответ №3:

определенный внутри метода внешнего класса

Если он определен внутри метода, то его область действия ограничена только этим методом.

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

1. мы можем вызвать : new className().Method();

2. Да, мы можем. Но мы не можем получить доступ к переменным внутри этого метода.

Ответ №4:

Из того, что я понял из вашего вопроса… (смотрите Пример ниже), на экземпляр класса ‘Elusive’, определенный в методе внешнего класса, нельзя ссылаться извне метода ‘Douter’.

 public class Outer {

    public void doOuter() {
        class Elusive{

        }
        // you can't get a reference to 'e' from anywhere other than this method
        Elusive e = new Elusive(); 
    }

    public class Inner {

        public void doInner() {

        }
    }

}