Junior
İç içe sınıflar nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
İç içe sınıflar (nested classes), başka bir sınıfın içinde bildirilen sınıflardır. Statik (static nested classes) veya statik olmayan (inner classes) olabilirler.
Statik iç içe sınıflar:
staticanahtar kelimesi ile bildirilirler.- Dış sınıfın statik olmayan üyelerine doğrudan erişimleri yoktur (sadece dış sınıf örneği aracılığıyla erişilebilir).
- Hem statik hem de statik olmayan üyeler içerebilirler.
- Dış sınıf örneği olmadan oluşturulabilirler.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public static class StaticNested {
// staticOuterVar'a erişimi vardır
public void printStaticValue() {
System.out.println(staticOuterVar);
}
// instanceOuterVar'a doğrudan erişimi yoktur
// public void printInstanceValue() {
// System.out.println(instanceOuterVar); // Derleme hatası
// }
}
}
Statik iç içe sınıfın kullanımı:
// Statik iç içe sınıf örneği oluşturma
Outer.StaticNested nestedObject = new Outer.StaticNested();
nestedObject.printStaticValue(); // 10 yazdırır
İç içe sınıflar (Inner Classes):
staticanahtar kelimesi ile bildirilmezler.- Tüm dış sınıf üyelerine, özel üyeler dahil, tam erişime sahiptirler.
- Statik üyeler içeremezler (sadece derleme zamanı sabitleri hariç).
- Oluşturulmak için dış sınıfın örneğine ihtiyaç duyarlar.
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public class Inner {
// staticOuterVar ve instanceOuterVar'a erişebilir
public void printValues() {
System.out.println(staticOuterVar); // Mevcut
System.out.println(instanceOuterVar); // Mevcut
}
}
}
İç içe statik olmayan sınıf kullanımı:
// İç içe sınıf örneği oluşturma
Outer outerObject = new Outer();
Outer.Inner innerObject = outerObject.new Inner();
innerObject.printValues(); // 10 ve 20 yazdırır
İç içe sınıfların avantajları:
- Mantıksal gruplama: Sadece başka bir sınıf tarafından kullanılan sınıflar, içinde mantıksal olarak gruplanabilir.
- Kapsülleme: İç içe sınıflar, özel üyelerine erişebilir.
- Okunabilirlik ve bakım: Kod daha düzenli hale gelir.
Statik olmayan iç içe sınıf türleri:
- Yerel sınıflar: Bir metodun içinde bildirilir.
- Anonim sınıflar: Belirli bir isimleri olmayan sınıflardır, genellikle soyut sınıf, arayüz veya temel sınıfın örneğini oluşturmak ve metodları geçersiz kılmak için kullanılırlar.
Yerel sınıf:
public class Outer {
public void myMethod() {
class LocalClass {
void display() {
System.out.println("Yerel sınıfın içinde");
}
}
LocalClass local = new LocalClass();
local.display();
}
}
Anonim sınıf (arayüz ile örnek):
interface Greeting {
void sayHello();
}
public class Outer {
public void greet() {
Greeting anonymousGreeting = new Greeting() {
@Override
public void sayHello() {
System.out.println("Anonim sınıftan merhaba!");
}
};
anonymousGreeting.sayHello();
}
}