#java
Есть класс внутри него есть еще класс который публик, сделал Class cs = new Class() cs.VnutriClass не могу так обратится к внутреннему классу вай?
Ответы
Ответ 1
Предположим, что у Вас есть некоторый (определенный Вами, а не тот, который 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();
Комментариев нет:
Отправить комментарий