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

  • DragsterMC Gaming

    DragsterMC G

    30 HAZİRAN 2013
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006
  • VvCompHelpvV

    VvCompHelpvV

    4 EYLÜL 2007