فئات جافا الداخلية
فئات جافا الداخلية
في Java ، من الممكن أيضًا تداخل الفئات (فئة داخل الفصل). الغرض من الفئات المتداخلة هو تجميع الفئات التي تنتمي معًا ، مما يجعل التعليمات البرمجية الخاصة بك أكثر قابلية للقراءة والصيانة.
للوصول إلى الفئة الداخلية ، قم بإنشاء كائن من الفئة الخارجية ، ثم قم بإنشاء كائن من الفئة الداخلية:
مثال
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)
فئة داخلية خاصة
على عكس الفصل "العادي" ، يمكن أن تكون الطبقة الداخلية private
أو protected
. إذا كنت لا تريد وصول الكائنات الخارجية إلى الفصل الداخلي ، فقم بتعريف الفئة على أنها private
:
مثال
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);
}
}
إذا حاولت الوصول إلى فصل دراسي داخلي خاص من فصل دراسي خارجي ، فسيحدث خطأ:
Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
OuterClass.InnerClass myInner = myOuter.new InnerClass();
^
فئة داخلية ثابتة
يمكن أن تكون الفئة الداخلية أيضًا static
، مما يعني أنه يمكنك الوصول إليها دون إنشاء كائن من الفئة الخارجية:
مثال
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
ملاحظة: تمامًا مثل static
السمات والطرق ، static
لا يمكن للفئة الداخلية الوصول إلى أعضاء من الفئة الخارجية.
الوصول إلى الفصل الخارجي من الفصل الداخلي
تتمثل إحدى ميزات الفئات الداخلية في قدرتها على الوصول إلى سمات وأساليب الفئة الخارجية:
مثال
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