Programlama dilinde iç içe sınıfların türleri nelerdir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java'da iç içe sınıflar:
-
Statik İç İçe Sınıflar (Static Nested Classes): Normal statik sınıf üyeleri gibi davranırlar. Dış sınıfın statik olmayan üyelerine erişimleri yoktur. Dış sınıf örneği olmadan oluşturulurlar.
public class Outer { private static String staticMsg = "Statik mesaj"; private String instanceMsg = "Örnek mesaj"; static class StaticNested { void displayStatic() { // Dış sınıfın statik üyelerine erişim System.out.println(staticMsg); // Dış sınıfın statik olmayan üyelerine erişim yok // System.out.println(instanceMsg); // Derleme hatası } } } -
İç Sınıflar (Inner Classes): Dış sınıf örneği ile ilişkilidir. Tüm (statik ve statik olmayan) üyelerine, özel üyeler dahil olmak üzere, tam erişime sahiptir.
private,protected,package-privateveyapublicolarak bildirilebilir.public class Outer { private static String staticMsg = "Statik mesaj"; private String instanceMsg = "Örnek mesaj"; class Inner { void display() { // Dış sınıfın statik ve statik olmayan üyelerine erişim System.out.println(staticMsg); System.out.println(instanceMsg); } } } -
Yerel Sınıflar (Local Classes): Bir blok (metot, yapıcı veya statik başlatıcı) içinde tanımlanır. Sadece bu blok içinde kullanılabilir.
finalveya etkilifinalolan yerel değişkenlere ve parametrelere, ayrıca dış sınıfın tüm üyelerine erişebilirler.public class Outer { private String instanceMsg = "Örnek mesaj"; void methodWithLocalClass() { final String localVar = "Yerel değişken"; // veya etkili `final` class Local { void display() { System.out.println(instanceMsg); System.out.println(localVar); } } Local localObj = new Local(); localObj.display(); } } -
Anonim Sınıflar (Anonymous Classes): İsimsiz yerel sınıflardır. Bir sınıfı tanımlayıp örneğini oluşturmak için kullanılırlar, ya bir arayüzü uygular ya da bir sınıfı genişletirler. Küçük ve tek kullanımlık nesneler oluşturmak için uygundur.
public class Outer { void methodWithAnonymousClass() { // Runnable arayüzünü uygulayan anonim sınıf Runnable myRunnable = new Runnable() { @Override public void run() { System.out.println("Anonim sınıftan çalıştırılıyor"); } }; new Thread(myRunnable).start(); // Thread sınıfını genişleten anonim sınıf Thread myThread = new Thread() { @Override public void run() { System.out.println("Thread genişleten anonim sınıftan çalıştırılıyor"); } }; myThread.start(); } }
İç içe sınıf türlerinin karşılaştırması:
| Sınıf Türü | Deklarasyon Yeri | Dış sınıfın üyelerine erişim | Oluşturmak için dış sınıf örneğine ihtiyaç var mı? | Erişim belirteçleri |
|---|---|---|---|---|
| Statik iç içe sınıf | Sınıf içinde, static anahtar kelimesi ile. |
Sadece statiklere. | Hayır | Tümleri |
| İç sınıf | Statik olmayan, sınıf içinde. | Tümüne (statik ve olmayan). | Evet | Tümleri |
| Yerel sınıf | Metot, yapıcı veya statik başlatıcı içindeki blokta. | Tüm dış sınıf üyelerine + final veya etkili final yerel değişkenlere. |
Evet | Hayır (final veya abstract varsayılan) |
| Anonim sınıf | Bir blok içinde (ifade). | Tüm dış sınıf üyelerine + final veya etkili final yerel değişkenlere. |
Evet | Hayır |