Есть класс внутри него есть еще класс который публик, сделал
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();
Комментариев нет:
Отправить комментарий