Java İç Sınıfları
Java İç Sınıfları
Java'da sınıfları (bir sınıf içinde bir sınıf) iç içe yerleştirmek de mümkündür. İç içe sınıfların amacı, birbirine ait olan sınıfları gruplandırmaktır, bu da kodunuzu daha okunabilir ve sürdürülebilir hale getirmektir.
İç sınıfa erişmek için dış sınıftan bir nesne oluşturun ve ardından iç sınıftan bir nesne oluşturun:
Örnek
class OuterClass {
int x = 10;
class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
// Outputs 15 (5 + 10)
Özel İç Sınıf
"Normal" bir sınıfın aksine, bir iç sınıf private
veya olabilir protected
. Dış nesnelerin iç sınıfa erişmesini istemiyorsanız, sınıfı şu şekilde bildirin private
:
Örnek
class OuterClass {
int x = 10;
private class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.y + myOuter.x);
}
}
Bir dış sınıftan özel bir iç sınıfa erişmeye çalışırsanız bir hata oluşur:
Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
OuterClass.InnerClass myInner = myOuter.new InnerClass();
^
Statik İç Sınıf
Bir iç sınıf da olabilir static
; bu, dış sınıftan bir nesne oluşturmadan ona erişebileceğiniz anlamına gelir:
Örnek
class OuterClass {
int x = 10;
static class InnerClass {
int y = 5;
}
}
public class Main {
public static void main(String[] args) {
OuterClass.InnerClass myInner = new OuterClass.InnerClass();
System.out.println(myInner.y);
}
}
// Outputs 5
Not: Tıpkı static
öznitelikler ve yöntemler gibi, bir static
iç sınıfın da dış sınıfın üyelerine erişimi yoktur.
Dış Sınıfa İç Sınıftan Erişin
İç sınıfların bir avantajı, dış sınıfın özniteliklerine ve yöntemlerine erişebilmeleridir:
Örnek
class OuterClass {
int x = 10;
class InnerClass {
public int myInnerMethod() {
return x;
}
}
}
public class Main {
public static void main(String[] args) {
OuterClass myOuter = new OuterClass();
OuterClass.InnerClass myInner = myOuter.new InnerClass();
System.out.println(myInner.myInnerMethod());
}
}
// Outputs 10