Inner Classes: Sınıf İçinde Sınıf Tanımlama ve Avantajları

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ürErişim ŞekliDış Sınıf Üyelerine Erişim
Member InnerDış sınıf nesnesi gerekir.Tüm üyelere (Private dahil).
Static NestedSınıf adıyla erişilir.Sadece statik üyelere.
Local ClassSadece metot içinden.Metot içi değişkenlere (final ise).
AnonymousTanı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.
 
Geri
Üst