2011-10-31 11 views
5
interface Test { 
public void test(); 
} 

public class TestMain { 
private String h = "AAA"; 

public static void main(String[] args) { 
    TestMain t = new TestMain(); 
} 

public TestMain() { 
    Test t = new Test() { 
     public void test() { 
      System.out.println(h); 
     } 
    }; 

    t.test(); 
} 

} 

Yukarıdaki kaynak iyi çalışıyor.Java anonim sınıfı ve ulaşılabilir özel değişken

Ama değişkenin 'h' anonim sınıfından ulaşılamaz olması gerektiğini düşünüyorum. Neden iyi çalıştığını bilmem gerek.

Tüm yardımlarınız için şimdiden teşekkür ederiz!

cevap

7

Statik olmayan bir iç sınıfın her bir örneği, iç sınıf nesnesinde depolanan bir referans değişkeni aracılığıyla kendisine bağlanmış olan dış sınıfın bir örneği olan örnekleme ortamı içerir. İç referans nesnesinin tüm üyeleri, bu referans yoluyla iç sınıf nesnesine kullanılabilir.

derleyici tabii o referans değişkeni, yanı sıra iç sınıf nesnesi dış sınıf nesnenin özel üyelerine almak için kullanabileceğiniz bazı özel erişimci işlevlerini ekleyerek ilgilenir. javap -c kullanarak dış sınıfın parçalarına ayrılmasıyla bu erişim fonksiyonlarını görebilirsiniz.

-1

Yuvalanmış bir sınıf, kendi sınıfının bir üyesidir. Statik olmayan iç içe geçmiş sınıflar (iç sınıflar), özel olarak bildirilmiş olsalar bile, kapsayıcı sınıfın diğer üyelerine erişebilir. Statik iç içe geçmiş sınıflar, kapsayıcı sınıfın diğer üyelerine erişemez.

+1

Statik iç içe sınıflar sınıfını kapsayan özel statik üyelerine erişim var. –

+0

Evet, doğrudur, "kapalı sınıfın statik olmayan üyelerine erişiminiz yok" – PaganSensei

+0

@SandeepRajeev: hala doğru değil. Kapsanan sınıfın bir örneği verildiğinde - yani, bir yöntemi argüman olarak alırsa veya kendi kendisinden birini yaratırsa - statik iç içe geçmiş bir sınıf bu örneğin özel üyelerine erişebilir. –

1

özel üyelere erişilebilirlik belirlenmesi için temel kural section 6.6.1 of the Java Language Specification göre şöyledir: üye veya yapıcı f [I] özel bildirildi

ardından erişim izin verilir sadece vücut içinde meydana gelirse ve eğer Üye veya kurucu beyanını kapsayan en üst düzey sınıftan.