SORU
14 NİSAN 2015, Salı


Yöntem yerel iç sınıf vs iç sınıf

Kod aşağıdaki çıktıyı middle üretir. Kimse bunun nasıl ayrıntılı olarak açıklayabilir mi?

Çünkü Bildirgesi "" class A sürümü class A örneği go() yöntemi oluşturulduktan sonra gelir? iç mi

class A {
    void m() {
        System.out.println("outer");
    }
}

public class MethodLocalVSInner {
    public static void main(String[] args) {
        new MethodLocalVSInner().go();
    }

    void go() {
        new A().m();
        class A {
            void m() {
                System.out.println("inner");
            }
        }
    }

    class A {
        void m() {
            System.out.println("middle");
        }
    }
}

CEVAP
14 NİSAN 2015, Salı


Yerel bir sınıf yöntemi çağrılacak bekliyordunuz sanırım. Yerel sınıf kapsamı dışında new A() kullandığın için bir şey olmamış. Yani, iç sınıf olacağını kapsamında önümüzdeki yakın aday, erişir. JLS §6.3:

Yerel bir sınıf bildirimi hemen bir blok (madde 14.2) içine kapsamında derhal kapsayan blok, kendi sınıf bildirimi de dahil olmak üzere geri kalanı.

Böylece, new A() yöntem ilk sırada, yerel sınıf sonrası ortaya çıkan erişimi vardır. Eğer daha önce sınıf bildirimi taşırsanız, beklenen çıktıyı alırsınız.

Ayrıca benzer bir örnek yer almaktadır JLS §14.3,.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Julia Graf

    Julia Graf

    6 Mayıs 2006
  • My Name Is Jeff

    My Name Is J

    26 ŞUBAT 2008
  • Ricardo Cerqueira

    Ricardo Cerq

    28 Mayıs 2008