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

  • JayzTwoCents

    JayzTwoCents

    26 AĞUSTOS 2012
  • Jimmie Jones

    Jimmie Jones

    16 Kasım 2007
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012