tam

2011-05-10 19 views
7

olası Kopyaları bu iç sınıflar da statik ilan edilmedikçe biz [kamu] iç sınıflarında statik yöntemler beyan edemez nedeni azi ne:
Why cant we have static method in an inner class?tam

Merhaba tüm? java'da, [iç] iç sınıflarda statik yöntemleri bildiremememizin nedeni, içsel sınıflar da statik olarak bildirilmediyse, tam olarak nedir?

Şaşırtıcı üst düzey sınıfları

cevap

2

Olmayan statik iç sınıfları sadece dış sınıfının bir örneği bağlamında meydana gelmiş bir varlık herhangi bir özel düzenleyici bulunur gerek kalmadan statik yöntemlerden herhangi bir sayı olabilir. Statik bir yöntem olması gidiyoruz

Yani ... bütün iç sınıfı statik olmak zorundadır. Bunu yapmadan, statik yöntemi çağırmaya çalıştığınızda iç sınıfın var olduğunu garanti edemezdiniz. sormak

+8

Bu sadece düz dışarı yanlıştır. Dış sınıfın içinde var olan iç sınıfın * örneği * ve dış sınıf için sadece örtük ve gizli bir referansa sahip olmanın erdemidir. Bunun sınıf tanımıyla ilgisi yok. –

1

soru - Eğer bir iç sınıf içinde statik bir yöntem var mı varsa, bunu nasıl statik yöntemini çağırır? Cevap, yapamazsın.

bir iç sınıf dış sınıfın örneklerine bağlıdır. Etkili Java kaynaktan

- "statik olmayan [İç içe] sınıfın her örneği dolaylı olarak içeren sınıfın bir kapama örneği ile ilişkilidir".

Bu

"iç" sınıfı statik yapmak için nedenidir. Bu aslında bir statik iç içe geçmiş sınıf ve onun tam olarak şişirilmiş bir sınıfıdır.

+4

Neden OuterClass.InnerClass.staticMethod() işlevini çalıştıramaz? Bir iç sınıf, basitçe, sınıf sınıfı örneğine gizli bir başvurusu olan normal bir sınıftır. –

+1

@Software Monkey - İyi nokta. İşte yakalayıcıdır - Sınıf yükleyicinin, dış sınıfın bir örneği bağlamı dışında, iç sınıfa erişimi yoktur, bu yüzden yukarıda bahsettiğiniz gibi bir şey yapamazsınız. – Kal

+1

Yani o zaman Java ile ilgili bir sorun var. Diğer diller bu kısıtlamaya sahip olmadığından. – Pacerier