الوراثة والواجهات
JAVA
class Employee { protected String name; protected double salary; Employee(String name, double salary) { this.name = name; this.salary = salary; } double monthlyCost() { return salary; } } class Manager extends Employee { private double bonus; Manager(String name, double salary, double bonus) { super(name, salary); this.bonus = bonus; } @Override double monthlyCost() { return salary + bonus; } } public class Main { public static void main(String[] args) { Employee[] team = { new Employee("Sara", 9500), new Manager("Khalid", 18000, 3000) }; for (Employee e : team) { System.out.println(e.name + " " + e.monthlyCost()); } } }
الناتج
Sara 9500.0 Khalid 21000.0
extends تخلي Manager يرث كل شي من Employee، و@Override تعيد تعريف دالة. والمصفوفة من نوع Employee تقدر تحمل الاثنين، وكل كائن يشغّل نسخته من monthlyCost(). هذا اسمه تعدد الأشكال (polymorphism).
الواجهة (interface) عقد: تحدد الدوال اللي لازم الكلاس يوفّرها، بدون ما تقول كيف.
JAVA
interface Payable { double amountDue(); } class Invoice implements Payable { private double total; Invoice(double total) { this.total = total; } public double amountDue() { return total * 1.15; } } public class Main { public static void main(String[] args) { Payable p = new Invoice(1000); System.out.println(p.amountDue()); } }
الناتج
1150.0