Страницы

Поиск по вопросам

вторник, 2 апреля 2019 г.

Как обращаться к классу внутри класса

Есть класс внутри него есть еще класс который публик, сделал
Class cs = new Class() cs.VnutriClass
не могу так обратится к внутреннему классу вай?


Ответ

Предположим, что у Вас есть некоторый (определенный Вами, а не тот, который java.lang.Class) класс Class с вложенным в него классом VnutriClass, и Вы пытаетесь запустить вот такой код:
Class cs = new Class(); cs.VnutriClass;
Здесь Вы создаете объект cs внешнего класса Class и далее пытаетесь обратиться к полю VnutriClass объекта cs класса Class и справедливо получаете ошибку на этапе компиляции, так как в классе Class нет поля VnutriClass. Ваша запись никоим образом не относится к взаимодействию с вложенным классом. Вы пытаетесь обратиться к полю класса.
Чтобы обратиться к вложенному классу извне, необходимо этот вложенный класс сделать статическим
public class Class { public static class VnutriClass {}; }
и обращаться к нему через внешний класс:
Class.VnutriClass vnutriClass = new Class.VnutriClass();
Если же Вы хотите добавить к внешнему классу поле внутреннего класса, то можно сделать так:
public class Class { private VnutriClass mVnutriClass;
public Class() { mVnutriClass = new VnutriClass(); }
VnutriClass getVnutriClass() { return mVnutriClass; }
public class VnutriClass {}; }
и работать с внутренним классом так:
Class cls = new Class(); Class.VnutriClass vnutriClass = cls.getVnutriClass();
Немного теории:
В Java, класс, определенный внутри другого класса называется вложенным
Существует два типа вложенных классов: статические и нестатические
Статический вложенный (static nested) класс – это вложенный класс, определенный с модификатором static. Вложенный статический класс не может непосредственно ссылаться на нестатические члены своего внешнего класса.
Нестатический вложенный класс называется внутренним (inner) классом. Внутренний класс имеет доступ ко всем переменным и методам своего внешнего класса и может непосредственно ссылаться на них таким же образом, как это делают остальные нестатические члены внешнего класса.
Пример со статическим вложенным классом:
public class Outer { public static class Nested {}; }

Outer.Nested nested = new Outer.Nested();
Пример с внутренним классом:
public class Outer { private Inner mInner;
public Outer() { mInner = new Inner(); }
Inner getInner() { return mInner; }
public class Inner{}; }

Outer outer = new Outer(); Outer.Inner inner = outer.getInner();

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

Отправить комментарий