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

  • BiGSH0TROB

    BiGSH0TROB

    7 NİSAN 2011
  • Kayla Caton - Peet

    Kayla Caton

    23 HAZİRAN 2012
  • MrOctopi

    MrOctopi

    6 Aralık 2010