Middle
Java'da iç içe (nested) sınıflar ile iç sınıflar (inner) arasındaki farklar nelerdir?
sobes.tech yapay zeka
AI'dan gelen yanıt
-
İç içe sınıflar (Nested classes): Dış sınıfın statik üyeleri. Dış sınıfın statik olmayan üyelerine (alanlar ve metodlar) doğrudan erişimleri yoktur, sadece dış sınıfın örneği aracılığıyla erişebilirler.
staticanahtar kelimesiyle tanımlanırlar. -
İç sınıflar (Inner classes): Dış sınıfın statik olmayan üyeleri. Dış sınıfın tüm üyelerine (statik ve statik olmayanlar) tam erişime sahiptirler, hatta özel üyeler de dahil. Bir iç sınıfın örneğini oluşturmak için dış sınıfın bir örneğine ihtiyaç vardır.
staticanahtar kelimesini kullanmazlar.
Örnek:
// Dış sınıf
class Outer {
private int outerField = 10;
private static int staticOuterField = 20;
// Statik iç içe sınıf
static class StaticNestedClass {
void display() {
// Sadece dış sınıfın statik üyelerine erişim
System.out.println("Statik iç içe: " + staticOuterField);
// outerField'a doğrudan erişim yok
// System.out.println(outerField); // Derleme hatası
}
}
// İç sınıf
class InnerClass {
void display() {
// Tüm dış sınıf üyelerine erişim
System.out.println("İç: " + outerField);
System.out.println("İç (statik): " + staticOuterField);
}
}
}
// Kullanım
public class Main {
public static void main(String[] args) {
// Statik iç içe sınıf örneği oluşturma
Outer.StaticNestedClass staticNested = new Outer.StaticNestedClass();
staticNested.display();
// İç sınıf örneği oluşturmak için dış sınıf örneği gerekir
Outer outer = new Outer();
Outer.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
| Özellik | İç içe sınıf (Nested Class) | İç sınıf (Inner Class) |
|---|---|---|
| Anahtar kelime | static |
Hayır |
| Dış sınıfın üyelerine erişim | Sadece statik üyeler | Tüm üyeler |
| Bir dış sınıf örneği olmadan iç sınıf örneği oluşturulabilir mi? | Hayır | Evet |
| Dış sınıf örneği ile bağlantı | Hayır | Evet |