العودة إلى الدورة

إعادة تعريف الدوال (Method Overriding) والكلمة المفتاحية super

إتقان لغة Java: من الصفر إلى مطور محترف (رحلة من 50 درساً)

الدرس 21: إعادة تعريف الدوال والكلمة المفتاحية super

1. إعادة تعريف الدوال (Method Overriding)

يحدث تجاوز الطريقة عندما توفر فئة فرعية تنفيذاً محدداً لدالة معرفة مسبقاً في فئة الأب. يجب أن يكون توقيع الدالة (الاسم والمعلمات) متطابقاً تماماً.

هذا مفهوم أساسي يُمكّن تعدد الأشكال (ارتباط وقت التشغيل).

java public class Car { public void accelerate() { System.out.println("Car accelerates normally."); } }

public class SportsCar extends Car { // Overriding: تقديم تنفيذ متخصص @Override public void accelerate() { System.out.println("SportsCar accelerates rapidly! (Vroom!)"); } }

// الاستخدام: Car myCar = new Car(); SportsCar fastCar = new SportsCar();

myCar.accelerate(); // المخرج: Car accelerates normally. fastCar.accelerate(); // المخرج: SportsCar accelerates rapidly!

التوصيف @Override: على الرغم من كونه اختيارياً، إلا أن من أفضل الممارسات استخدامه. فهو يخبر المترجم بالتحقق مما إذا كانت الدالة تتجاوز فعلياً دالة في فئة الأب، مما يساعد في اكتشاف الأخطاء مبكراً.

2. الكلمة المفتاحية super

تُستخدم الكلمة المفتاحية super للإشارة إلى كائن فئة الأب المباشرة.

أ. استدعاء دوال فئة الأب

يسمح للفئة الابن بتنفيذ نسخة الأب من دالة تم تجاوزها.

java public class SportsCar extends Car { @Override public void accelerate() { super.accelerate(); // استدعاء Car.accelerate() التابعة للأب System.out.println("Then engages turbo."); } }

ب. استدعاء منشئات فئة الأب

تُستخدم لاستدعاء منشئ فئة الأب صراحةً من منشئ الفئة الابن. إذا لم يتم استخدامه صراحةً، تقوم Java تلقائياً بإدراج super() (استدعاء منشئ الأب بدون معاملات) كأول سطر.

java // الأب public class Person { public Person(String name) { ... } }

// الابن public class Employee extends Person { public Employee(String name) { super(name); // يجب أن تكون أول جملة } }