#java #inner-classes #nested-class
#java #внутренние классы #вложенный класс
Вопрос:
Допустим, у меня есть такой класс:
class Outer {
public void getOuterValue() { }
class Inner {
public void getInnerValue() { }
}
}
Я понимаю, что я мог бы создать объект этого класса как:
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Но давайте предположим, что я получаю этот объект из какого-то другого метода:
void someMethodSomewhere(Outer o) {
// How do I call getInnerValue() here using o?
}
Есть ли способ вызвать метод «getInnerValue», используя «o» в приведенном выше сценарии?
Пожалуйста, дайте мне знать.
Комментарии:
1. Я попробовал «o.getInnerValue ()», к сожалению, это не сработало.
2. @LutzHorn Нет, ты не можешь этого сделать. Inner — это экземпляр члена, для которого требуется экземпляр Outer , следовательно, outer.new Inner , а не new Outer . Inner()
3. @Lutz Horn Нет, это не может работать! Может быть произвольное количество объектов типа
Inner
, поэтому это даже теоретически не может работать.
Ответ №1:
Нет. Вам нужно иметь экземпляр Inner
для вызова методов на нем.
Экземпляра внешнего класса недостаточно (это будет работать наоборот: экземпляр внутреннего класса имеет ссылку на экземпляр внешнего класса).
Комментарии:
1. Я вижу. Итак, я думаю, мне нужно было бы избавиться от внутреннего класса и иметь метод для внешнего класса.
2. Или передать экземпляр
Inner
.3. Имеет смысл. Спасибо за вашу помощь.
Ответ №2:
void someMethodSomewhere(Outer o) {
// How do I call getInnerValue() here using o?
}
Вы не можете. getInnerValue() — это метод во внутреннем. Внешний не является внутренним и не имеет ссылки на внутренний. Когда вам передают o
, нет способа перейти от этого к любому экземпляру Inner, потому что с ним не связан ни один o
.
Комментарии:
1. Есть ли способ связать его с «o»? Я думаю, я мог бы сохранить экземпляр «Inner» в «Outer»
2. Если
o
бы у вас был экземпляр Inner, то да, конечно. Это ничем не отличалосьo
бы от наличия экземпляра StringBuffer или ArrayList или чего-либо еще. Код, как написано в описании, не включает в себя какой-либо экземпляр Inner, принадлежащий или доступный изo
.3. Да, я надеялся не сохранять этот экземпляр, поэтому я не включил его в описание. Спасибо за объяснение!