public class Test{
public static void main(String args[]){
System.out.println("Hello");
SSS sa = new SSS();
uuu sb = new uuu();
}
class uuu{
public String text(String a){
return ("intern:" + a);
}
}
}
class SSS{
public String text(String a){
return ("extern:" + a);
}
}
Почему если создаю обьект на базе класса SSS все ок а если на базе uuu выскакивает ошибка
Test.java:5: non-static variable this cannot be referenced from a static context
uuu sb = new uuu();
Но если я создам обьект типа uuu в нестатическом методе класса Test и верну ссылку на обьект типа uuu то все будет ок
public class Test{
public static void main(String args[]){
System.out.println("Hello");
SSS sa = new SSS();
uuu sb = new Test().t_uuu();
System.out.println(sa.text("Hello"));
System.out.println(sb.text("Hello"));
}
public uuu t_uuu(){return new uuu();}
class uuu{
public String text(String a){
return ("intern:" + a);
}}
}
class SSS{
public String text(String a){
return ("extern:" + a);
}
}
3. ERROR in Test.java (at line 6)
uuu sb = new uuu();
^^^^^^^^^
No enclosing instance of type Test is accessible. Must qualify the allocation with an enclosing instance of type Test (e.g. x.new A() where x is an instance of Test).
Понятно, что вызов к-тора влож класса компилер пытается связать с доступом к экземпляру включающего класса, что делается либо через this изнутри экземляра включающего класса, или в статик контексте требуется явный вызов против экземпляра.
Не помню темы влож классов, честно говоря. Вроде бы влож класс имеет доступ к членам включающего. Перечитывайте доку по языку, по вложенным классам. Если так - то требование предоставить ссылку весьма закономерно.