2016-12-23 23 views
8

Öğrenme Java'sında Inner sınıfını okudum. Ben javap 'Animal$Brain' iç sınıf iç sınıf yapıcısı onu kapsayan örneğine referans alır açıklarJava İç Sınıfı

Compiled from "Animal.java"class 
Animal$Brain { 
    final Animal this$0; 
    Animal$Brain(Animal); 
} 

olarak çıktı verir, derleme sonra bu kodu

class Animal{ 
    class Brain{ 
    } 
} 

bulundu. Ben derleme sonra sonra bu

class Animal{ 
    private class Brain{ 
    } 
} 

gibi özel olarak iç sınıfını tanımlamak Fakat javap 'Animal$Brain'

Compiled from "Animal.java" 
class Animal$Brain { 
    final Animal this$0; 
} 

Peki neden çıktı farklıdır

olarak çıktı verir? İç sınıf kurucusu neden gösterilmiyor? İkinci durumda da, iç sınıf, sınıflandırma örneğinin referansını alıyor.

+1

Bunun nedeni, çünkü sınıfın kamu kurucusunun gitmesidir (yeni Animal(). Yeni Beyin(); "artık harici) yapamazsınız. – Rogue

cevap

7

İyi soru. Özel bir iç sınıf olarak Brain olmadığını ilan ettiği o

geçirilen paket, korumalı ve kamu alanları ve yöntemleri sınıflarının dışında

hiçbir seçenek kullanılırsa , javap baskılar, this göre, varsayılan yapıcısı örtülü olarak gizli olacak ve dolayısıyla Animal sınıfının dışında görünmeyecektir.

Ref: sınıfların http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.9 Varsayılan olarak

+0

javap, kendisine iletilen sınıfların varsayılan, korunan ve ortak alanlarını ve yöntemlerini yazdırdığından ve iç sınıf yapıcısını yazdırmıyor olduğundan, iç sınıf kurucusunun özel olduğunu ima eder. –

+1

Evet, cevabı düzenledim – code

1

, javap baskılar olmayan özel üyeler.

Tüm sınıfları ve üyeleri göstermek için -p seçeneğini kullanabilirsiniz.

//javap -p 'Animal$Brain.class' 

Compiled from "Animal.java" 
class Animal$Brain { 
    final Animal this$0; 
    private Animal$Brain(Animal); 
}