جاوا

جلسه ۴۴: وراثت چندگانه در جاوا

در این درس خواهید آموخت که وراثت چندگانه چیست و چگونه می توان آن را در جاوا پیاده سازی کرد. موارد زیر را بیان خواهیم کرد:

  • وراثت چندگانه چیست؟
  • نحوه پیاده سازی
  • یک مثال
  • مقایسه اینترفیس با کلاس انتزاعی

وراثت چندگانه چیست؟

وقتی یک کلاس از بیش از یک کلاس پایه مشتق شده باشد ، به عبارت دیگر وقتی یک کلاس بیش از یک کلاس والد (والد مستقیم و بدون واسطه) دارد ، یک نمونه از وراثت چندگانه است. مثال:

  • هیوندای النترا اتومبیل است
  • یک هیوندای النترا یک سدان نیز است

نحوه پیاده سازی

همانطور که قبلاً ذکر شد ، در جاوا ، یک کلاس نمی تواند از بیش از یک کلاس ارث بری داشته باشد. بنابراین این سوال مطرح می شود ، “چگونه می توانیم وراثت چندگانه را پیاده سازی کنیم؟” پاسخ سوال فوق Interface ها هستند. در جاوا وراثت چندگانه را می توان با استفاده از اینترفیس ها پیاده سازی کرد.

کلاس ها و اینترفیس ها می توانند از بیش از یک اینترفیس ارث بری داشته باشد.

بنابراین از این طریق می توان به وراثت چندگانه در جاوا دست یافت.

یک مثال

بیایید مثالی از الانترا را که در ابتدای درس آورده شده است ، پیاده کنیم. این مثال را می توان با استفاده از موارد زیر پیاده سازی کرد:

  • یک کلاس پایه به نام Car
  • اینترفیسی به نام IsSedan
  • یک کلاس Elantra از Car مشتق شده و IsSedan را پیاده سازی می کند

این رابطه ها را می توان در تصویر زیر دید:

پیاده سازی را در زیر می بینید:

class Car {  // Base class

  private int model;  // Common features of all cars
  private String manufacturer;

  public Car(int model, String manufacturer) {  // Constructor
    this.model = model;
    this.manufacturer = manufacturer;
  }

  public void printDetails() {

    System.out.println("The model of " + getClass().getSimpleName() + " is: " + model);
    System.out.println("The manufacturer of " + getClass().getSimpleName() + " is: " + manufacturer);
  }

}  // End of Car class

interface IsSedan {  // Interface for sedans

  int bootSpace = 420;  // Sedans have boot space

  void bootSpace();    // Every sedan must implement this

}  // End of IsSedan interface

class Elantra extends Car implements IsSedan {  // Elantra is a Car and is a Sedan also

  private String variant;    // Elantra's data member

  public Elantra(int model, String variant) {  // Constructor
    super(model, "Hyundai");  // Calling the parent constructor with alredy known manufacturer
    this.variant = variant;  
  }

  @Override
  public void bootSpace() { // Implementation of the interface method
    System.out.println("The bootspace of Elantra is: " + IsSedan.bootSpace +" litres");
  }

  @Override
  public void printDetails() {  // Overriding the parent class's inherited method
    super.printDetails();    // Calling the method from parent class
    System.out.println("The variant of Elantra is: " + variant); // printing the data member of this class
  }
  
}  // End of Elantra class


class Main {

  public static void main(String[] args) {

    Elantra sport = new Elantra(2019, "Sport");  //creating Sports variant Elantra
    Elantra eco = new Elantra(2018, "Eco");      //creating Eco variant Elantra

    sport.printDetails();    
    sport.bootSpace();       

    System.out.println();

    eco.printDetails();
    eco.bootSpace();
  }
  
}

اکنون که وراثت چندگانه را پیاده سازی کردیم ، بیایید نگاهی به تفاوت بین یک اینترفیس و یک کلاس انتزاعی بیندازیم.

مقایسه اینترفیس با کلاس انتزاعی

از اینترفیس ها و کلاس های انتزاعی برای دستیابی به انتزاع استفاده می شود اما با برخی تفاوت های اصلی:

اینترفیس ها کلاس های انتزاعی
از وراثت چندگانه پیشتیبانی می کنند از وراثت چندگانه پیشتیبانی نمی کنند
همه اعضا public هستند می توانند اعضای private , protected , public داشته باشند
همه اعضای داده ای استاتیک و فاینال هستند می توانند اعضای داده ای غیر استاتیک و غیر فاینال داشته باشند
نمی توانند متد سازنده داشته باشند می توانند متد سازنده داشته باشند

 

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا