public class ABC extends XYZ
{
public static class InnerClass1
{
...
}
InnerClass1
не внутренний класс. Это вложенный класс, из-за слова static
.
Если бы не static
, это был бы внутренний класс. И любой экземпляр этого внутреннего класса будет иметь скрытую ссылку на ABC
(который также является XYZ
). Если внутренний класс вызвал любые методы экземпляра ABC
или XYZ
или ссылался на любые переменные экземпляра в этих классах, он использовал бы эту скрытую ссылку для вызова методов экземпляра или доступа к переменным экземпляра.
Так как это вложенный класс, то нет скрытой ссылки на ABC
(или XYZ
). Таким образом, если вы вызываете метод экземпляра или ссылаетесь на переменную экземпляра, он не может этого сделать, потому что нет объекта ABC
для работы. (Тем не менее, вы все еще можете назвать статический метод с ABC
, или обратитесь к статической переменной.)
Я не уверен, что решение - это зависит от ваших потребностей. Возможно, что методы XYZ
, которые вы не можете вызвать, на самом деле не нуждаются в объекте XYZ
, и поэтому эти методы должны быть статическими. Также возможно, что вложенный класс должен иметь некоторую явную переменную ABC
или XYZ
, которую он использует для доступа к методам экземпляра; Вы все еще можете вызвать методы экземпляра из вложенного класса, если у вас есть объект для работы на:
public static class NestedClass {
XYZ x;
void someMethod() {
x.instanceMethod(); // legal even if instanceMethod is non-static
}
}
Другое решение было бы убрать слово static
, так что InnerClass1
действительно имеет скрытую ссылку на ABC
. Это означает, что при создании экземпляра InnerClass1
вам понадобится объект ABC
, на который он ссылается. Если вы создаете это в каком-то другом классе, синтаксис будет что-то вроде
ABC abcObject;
...
ABC.InnerClass1 newObject = abcObject.new InnerClass1();
Методы, к которым у вас нет доступа, являются ли они статическими методами? –
Помните, что статический класс может получить доступ только к статическим членам. Таким образом, вы не можете получить доступ к нестационарному объекту. – afzalex