Java Inner Classes
السلام عليكم ورحمة الله وبركاته
في هذه المقاله سنناقش انواع الInner classes في الجافا
في الجافا، كتابة class داخل class آخر مسموح، الكلاس الداخلي يسمى Nested class والخارجي يسمى Outer class.
كمثال على الNested class:
class Outer {
class Nested {
}
}
يمكن تقسيم الNested classes الى نوعين:
- Non-static nested classes
- Static nested classes
نبدأ أولا بالInner classes
Inner Classes (Non-static Nested Classes)
يمكن التفكير ب الInner classes كحماية اضافية للكلاس الداخلي.
من المعروف أن الكلاس لا يمكن ربطه باحد الaccess modifiers مثل (public, private, etc...)، ولكن يمكننا فعل ذلك اذا كان Inner class
للInner classes ثلاثة أنواع:
- Inner classes
- Method-local inner classes
- Anonymous inner classes
1- Inner classes
انشاء Inner class بسيط جدا، كل ما عليك فعله هو أن تعرف كلاس بداخل كلاس آخر كما رأينا بالأعلى
سنعرف Private inner class بالمثال التالي:
class Outer {
int num;
// inner class
private class Inner {
public void print() {
System.out.println("This is an inner class");
}
}
// Accessing he inner class from the method within
void display_Inner() {
Inner inner = new Inner();
inner.print();
}
}
public class My_class {
public static void main(String args[]) {
// Instantiating the outer class
Outer outer = new Outer();
// Accessing the display_Inner() method.
outer.display_Inner();
}
}
Output:
This is an inner class.
في هذا المثال استعملنا method اضافية [()display_Inner] لعمل object من الprivate inner class ومن ثم استدعاء الميثود بداخله.
باختصار، الطريقة الصحيحة لعمل Instantiating للInner class كالتالي:
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
2- Method-local Inner Classes
في الجافا، يمكننا أيضا ان نعرف كلاس داخل ميثود معينة، ولكن هذا الكلاس لا يمكن تعريفه أو استخدامه الا داخل نفس الميثود.
المثال التالي يشرح كيفية استخدام الmethod-local inner class:
public class Outer {
// instance method of the outer class
void my_Method() {
int num = 23;
// method-local inner class
class MethodInner {
public void print() {
System.out.println("This is method inner class "+num);
}
} // end of inner class
// Accessing the inner class within the same scope
MethodInner inner = new MethodInner();
inner.print();
}
public static void main(String args[]) {
Outerclass outer = new Outerclass();
outer.my_Method();
}
}
Output:
This is method inner class 23
3- Anonymous Inner Class
هو كلاس يتم انشاؤه بدون اسم محدد له (Anonymous). عموما نستخدم هذا النوع من الكلاسات عندما نريد أن نعمل override لميثود في كلاس او انترفيس.
مثال لكيفية انشاء Anonymous inner class:
AnonymousInner an_inner = new AnonymousInner() {
public void my_method() {
........
........
}
};
البرنامج التالي يوضح استخدام الAnonymous inner class لعمل override لميثود موجودة بabstract class:
abstract class AnonymousInner {
public abstract void mymethod();
}
public class Outer_class {
public static void main(String args[]) {
AnonymousInner inner = new AnonymousInner() {
public void mymethod() {
System.out.println("This is an example of anonymous inner class");
}
};
inner.mymethod();
}
}
Output:
This is an example of anonymous inner class
4- Static Nested Classes
عندما نعرف الInner class ك Static، يمكننا أن ننشئ object منه بدون الحاجه لإنشاء object من الouter class
كذلك الStatic inner class لا يمكنه الوصول او استخدام الinstance variables or methods الموجودة بالouter class
مثال لهذا النوع من الinner classes:
class MyOuter {
static class Nested {
}
}
البرنامج التالي يوضح الفروقات بين انشاء object من static inner class و inner class:
public class Outer {
static class Nested {
public void my_method() {
System.out.println("This is my nested class");
}
}
public static void main(String args[]) {
Outer.Nested nested = new Outer.Nested();
nested.my_method();
}
}
output:
This is my nested class
الى هنا نصل الى ختام موضوعنا.
وفق الله الحميع لما يحبه ويرضاه.
التعليقات (0)
عرض المزيد.. جديد مقالاتي
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !