English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدرس، ستتعلم الفئات الداخلية الثابتة باستخدام الأمثلة. ستعرف أيضًا الفرق بين الفئة الثابتة والفئة الداخلية.
كما ذكرنا في الدرس السابق، يمكننا امتلاك فئة داخل فئة أخرى في Java. هذه الفئة تسمى الفئة الداخلية. في Java، هناك نوعان من الفئات الداخلية:
الفئة الداخلية غير الثابتة (الفئة الداخلية)
الفئة الداخلية الثابتة.
في الدرس السابق، ناقشنا الفئات الداخلية. إذا كنت ترغب في معرفة الفئات الداخلية، يرجى زيارةفئة Java الداخلية.
في هذا الدرس، سنتعلم الفئات الداخلية الثابتة.
نستخدم كلمة المفتاح static لجعل فئاتنا الداخلية ثابتة.
ملاحظة:في Java، يسمح فقط للفئات الداخلية بأن تكون ثابتة.
مثل الفئات العادية، يمكن للفئات الداخلية الثابتة أن تحتوي على حقول ثابتة وطرق ثابتة وغير ثابتة في نفس الوقت. على سبيل المثال،
فئة Animal { static class Mammal { // الأعضاء الثابتة والثابتة في فئة Mammal } // أعضاء فئة Animal }
الفئة الداخلية الثابتة مرتبطة بالفئة الخارجية.
لا نحتاج إلى موضوع خارجي لزيارة الفئة الداخلية الثابتة.
class Animal { // الفئة الداخلية class Reptile { public void displayInfo() { System.out.println("أنا حيوان زواحف."); } } // الفئة الثابتة static class Mammal { public void displayInfo() { System.out.println("أنا حيوان ثديي."); } } } class Main { public static void main(String[] args) { // إنشاء كائن من فئة خارجية Animal animal = new Animal(); // إنشاء كائن من فئة غير المدمجة Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); // إنشاء كائن من فئة المدمجة الثابتة Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); } }
نتائج الإخراج
أنا حيوان زواحف. أنا حيوان ثديي.
في البرنامج السابق، لدينا فئتين داخلتين Mammal و Reptile في فئة Animal.
لإنشاء كائن من فئة Reptile غير الثابتة، استخدمنا
Animal.Reptile reptile = animal.new Reptile();
لإنشاء كائن من فئة Mammal الثابتة، استخدمنا
Animal.Mammal mammal = new Animal.Mammal();
في Java، تكون الفئات المدمجة مع فئة خارجية. هذا هو السبب في أن الفئات المدمجة يمكنها الوصول فقط إلى أعضاء فئة الخارجية (حقول ثابتة وطرق).
لنرى ما سيحدث إذا حاولنا الوصول إلى حقل أو طريقة غير ثابتة من فئة خارجية.
class Animal { static class Mammal { public void displayInfo() { System.out.println("أنا حيوان ثديي."); } } class Reptile { public void displayInfo() { System.out.println("أنا حيوان زواحف."); } } public void eat() { System.out.println("أأكلُ الطعام."); } } class Main { public static void main(String[] args) { Animal animal = new Animal(); Animal.Reptile reptile = animal.new Reptile(); reptile.displayInfo(); Animal.Mammal mammal = new Animal.Mammal(); mammal.displayInfo(); mammal.eat(); } }
نتائج الإخراج
Main.java:28: خطأ: لا يمكن العثور على الرمز mammal.eat(); ^ symbol: طريقة eat() location: متغير mammal من نوع Mammal خطأ 1 حالة الخروج للمحول 1
في المثال السابق، قمنا بإنشاء طريقة غير ثابتة eat() في فئة Animal.
الآن، إذا حاولنا استخدام الكائن mammal لاستدعاء eat()، فإن محرر البرمجة سيظهر خطأ.
هذا لأن object mammal هو object من الفئة الثابتة، لذا لا يمكننا الوصول إلى الطريقة غير الثابتة من الفئة الثابتة.
كما ذكرنا سابقًا، يمكن أن تكون فقط الفئات الداخلية ثابتة. لا يمكننا امتلاك فئة علوية ثابتة.
لنرى ما الذي سيحدث إذا حاولنا جعل الفئة العليا ثابتة.
class static Animal { public static void displayInfo() { System.out.println("I am an animal"); } } class Main { public static void main(String[] args) { Animal.displayInfo(); } }
نتائج الإخراج
Main.java:1: خطأ: modifier static غير مسموح هنا class static Animal { ^ خطأ 1 حالة الخروج للمحول 1
في المثال أعلاه، نحاول إنشاء فئة ثابتة Animal. لأن Java لا يسمح باستخدام الفئات الستاتيكية العليا، سيظهر خطأ.