Java и классы

Модератор: Модераторы разделов

Аватара пользователя
AMD
Сообщения: 478
Статус: Maestro
ОС: Linux Kubuntu 7.10

Java и классы

Сообщение AMD »

Код: Выделить всё

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);
    }
}
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Java и классы

Сообщение sergio »

На ваш первый код:

Код: Выделить всё

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 изнутри экземляра включающего класса, или в статик контексте требуется явный вызов против экземпляра.
Не помню темы влож классов, честно говоря. Вроде бы влож класс имеет доступ к членам включающего. Перечитывайте доку по языку, по вложенным классам. Если так - то требование предоставить ссылку весьма закономерно.

Код: Выделить всё

$ javac -version
Eclipse Java Compiler v_677_R32x, 3.2.1 release, Copyright IBM Corp 2000, 2006. All rights reserved.
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Java и классы

Сообщение v04bvs »

Делайте статический вложенный класс.
Спасибо сказали: