إعادة تعريف الدوال الموروثة
جزء من قسم Object Oriented Programming في رحلة JavaScript على Coddy — الدرس 36 من 56.
تجاوز الدوال (Method overriding) هو عندما توفر الفئة الابنة تنفيذها الخاص لدالة ورثتها من الفئة الأب. نسخة الابن "تتجاوز" (تستبدل) نسخة الأب.
مثال بسيط:
أنشئ فئة أصل (parent class) مع طريقة (method):
class Vehicle {
start() {
return "Vehicle starting...";
}
}أنشئ فئة تابعة (child class) ترث من الفئة الأب (parent):
class Car extends Vehicle {
// هذا يتجاوز (OVERRIDES) طريقة start() الخاصة بـ Vehicle
start() {
return "Car engine roaring to life!";
}
}استخدم الفئات:
const vehicle = new Vehicle();
const car = new Car();
console.log(vehicle.start()); // "Vehicle starting..." (الأصلي)
console.log(car.start()); // "Car engine roaring to life!" (تم تجاوزه)القواعد الأساسية لإعادة التعريف (Overriding):
- نفس اسم الدالة كما في الفئة الأب
- نفس المعاملات أو معاملات متوافقة
- يتم استدعاء نسخة الابن على كائنات الابن
- لا توجد كلمات مفتاحية خاصة مطلوبة - فقط قم بتعريف الطريقة
التحدي
لقد تم إعطاؤك فئة أب Shape وفئة ابن Circle. تمتلك الفئة الأب طريقة calculateArea() تُرجع 0.
مهمتك هي تجاوز طريقة calculateArea() في فئة Circle لحساب المساحة الفعلية للدائرة.
صيغة مساحة الدائرة هي: π × radius²
في JavaScript: Math.PI * this.radius * this.radius
ورقة مرجعية
يحدث تجاوز الطريقة (Method overriding) عندما توفر الفئة الابنة تنفيذها الخاص لطريقة موروثة من الفئة الأب. تحل نسخة الابنة محل نسخة الأب.
مثال:
class Vehicle {
start() {
return "Vehicle starting...";
}
}
class Car extends Vehicle {
// يتجاوز طريقة start() الخاصة بـ Vehicle
start() {
return "Car engine roaring to life!";
}
}
const vehicle = new Vehicle();
const car = new Car();
console.log(vehicle.start()); // "Vehicle starting..."
console.log(car.start()); // "Car engine roaring to life!"القواعد الأساسية:
- استخدم نفس اسم الطريقة مثل الأب
- استخدم نفس المعاملات أو معاملات متوافقة
- يتم استدعاء نسخة الابنة على كائنات الابنة
- لا حاجة لكلمات مفتاحية خاصة - فقط قم بتعريف الطريقة في الفئة الابنة
جرّب بنفسك
import { Shape } from './shapes.js';
import { Circle } from './shapes.js';
// اختبر تنفيذك
const myCircle = new Circle(5);
console.log(myCircle.calculateArea());
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1الكائنات والكلمة المفتاحية this
مراجعة سريعة: الكائناتإضافة Methods إلى الكائناتفهم الكلمة المفتاحية thisConstructor Functionsالكلمة المفتاحية newتحدي المراجعة7الوراثة والكلمة المفتاحية extends
الوراثةعلاقة "is-a"الكلمة المفتاحية extendsالدالة super()وراثة الخصائص والوظائفتحدي المراجعة2تنظيم الكود
ما هي الـ Modules؟التصدير باستخدام exportالاستيراد باستخدام importالـ Default مقابل الـ Named Exports8تنظيم كود OOP
تنظيم الـ Classes في Modules11مشروع: مصيّر الأشكال
إعداد: فئة Shape والتصديروراثة فئة Circle