Thilo iyi bir şey ekledi cevap , "Bu nasıl mümkün olabilir?" İlk sorunuza . İkinci sorulan soruya biraz ayrıntı vermek istiyorum: Bu davranışa neden izin veriliyor?
Yeni başlayanlar için, bu davranışın, tanım gereği statik olmayan iç içe tipler olan iç sınıflarla sınırlı olmadığını açıkça görelim. Statik olması ve kapalı bir örneği bulunamayan iç içe geçmiş numaralandırmalar ve arabirimler dahil olmak üzere tüm iç içe geçmiş türler için bu davranışa izin verilir. Temel olarak, model aşağıdaki ifadeye göre bir sadeleştirmedir: İç içe kod, kapalı koda tam erişime sahiptir ve tersi de geçerlidir.
Öyleyse neden? Bence bir örnek konuyu daha iyi gösteriyor.
Bedeninizi ve beyninizi düşünün. Kolunuza eroin enjekte ederseniz, beyniniz yükselir. Eğer beyninizin amigdala bölgesi, kişisel güvenliğiniz için bir tehdit olduğuna inandığını görürse, örneğin bir yaban arısı deyin, vücudunuzu diğer yöne çevirip tepeler için iki kez "düşünmeden" koşturur.
Böylece, beyin vücudun içsel bir parçasıdır - ve garip bir şekilde, tam tersi de. Bu tür yakından ilişkili kuruluşlar arasındaki erişim kontrolünü kullanmak, ilişki iddialarını kaybeder. Erişim kontrolüne ihtiyacınız varsa, sınıfları daha farklı birimlere ayırmanız gerekir. O zamana kadar aynı birim. İleri çalışmalar için itici bir örnek, bir Java'nın Iterator
genellikle nasıl uygulandığına bakmak olacaktır .
Kapalı koddan iç içe koda sınırsız erişim, çoğunlukla iç içe tipteki alanlara ve yöntemlere erişim değiştiricileri eklemek için işe yaramaz hale getirir. Bunu yapmak dağınıklığı arttırır ve Java programlama dilinin yeni kullanıcıları için yanlış bir güvenlik duygusu sağlayabilir.