crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Inner Classes: İç İçe Geçmiş Mimari
1. Neden Inner Class Kullanırız?
Eğer bir sınıf sadece başka bir sınıfın içinde anlam ifade ediyorsa ve dış dünyadan tamamen soyutlanması gerekiyorsa, onu dışarıda tanımlamak yerine "içeriye" alırız.
Mantıksal Gruplama: Sadece tek bir yerde kullanılacak sınıfları bir arada tutar.
Artırılmış Kapsülleme: İç sınıf, dış sınıfın private üyelerine (değişken ve metotlarına) doğrudan erişebilir. Bu, başka hiçbir dış sınıfın yapamayacağı bir ayrıcalıktır.
Daha Temiz Kod: Yardımcı sınıfların proje dizininde (package) kalabalık yapmasını önler.
2. Inner Class Türleri
Java'da kullanım amacına göre 4 farklı dahili sınıf türü bulunur:
A. Member Inner Class (Üye Dahili Sınıf)
En temel türdür. Bir sınıfın üyesi gibi (değişken veya metot gibi) tanımlanır. Bu sınıfa erişmek için önce dış sınıftan bir nesne oluşturmak şarttır.
Java:
class DisSinif {
private String mesaj = "Dış sınıfın gizli mesajı";
class IcSinif {
void mesajıGoster() {
System.out.println(mesaj); // Private üyeye doğrudan erişim!
}
}
}
B. Static Nested Class (Statik Yerleşik Sınıf)
Dış sınıfın bir parçasıdır ancak dış sınıftan bir nesne oluşturulmasına gerek kalmadan çağrılabilir. Dış sınıfın statik olmayan (instance) üyelerine erişemez.
Java:
class DisSinif {
static class StatikIcSinif {
void selamVer() { System.out.println("Statik sınıftan selam!"); }
}
}
// Kullanım: DisSinif.StatikIcSinif nesne = new DisSinif.StatikIcSinif();
C. Local Inner Class (Yerel Dahili Sınıf)
Bir metodun içinde tanımlanır. Sadece o metodun gövdesi içinde geçerlidir.D. Anonymous Inner Class (Anonim Dahili Sınıf)
İsmi olmayan sınıflardır. Genellikle bir interface veya abstract sınıfı hızlıca "kullan-at" şeklinde implemente etmek için kullanılır. Event handling (buton tıklama olayları vb.) işlemlerinde çok yaygındır.3. Özet Karşılaştırma Tablosu
| Tür | Erişim Şekli | Dış Sınıf Üyelerine Erişim |
|---|---|---|
| Member Inner | Dış sınıf nesnesi gerekir. | Tüm üyelere (Private dahil). |
| Static Nested | Sınıf adıyla erişilir. | Sadece statik üyelere. |
| Local Class | Sadece metot içinden. | Metot içi değişkenlere (final ise). |
| Anonymous | Tanımlandığı anda. | Kısıtlı erişim. |
4. Kullanım Senaryosu: "Araba ve Motor"
Bir Motor sınıfı, Araba sınıfı olmadan mantıklı bir varlık değildir. Ayrıca motorun, arabanın bazı gizli teknik verilerine (beygir gücü kontrolü vb.) erişmesi gerekir. İşte burada Inner Class mükemmel bir çözümdür.
Java:
class Araba {
private String model = "Tesla Model S";
class Motor {
void calistir() {
System.out.println(model + " motoru çalıştı...");
}
}
}
Sonuç
Inner sınıflar, "sınıf içinde sınıf mı olur?" sorusunun en profesyonel cevabıdır. Kodunuzun mimarisini daha sıkı, daha güvenli ve daha düzenli hale getirir. Özellikle büyük projelerde, sadece bir sınıfa hizmet eden yardımcı mantıkları gizlemek için paha biçilemezdir.