چه تفاوتی بین کلاس abstract و interface وجود دارد؟

دقیقا چه تفاوتی بین کلاس abstract و interface وجود دارد؟

php
1
رضا پرسیده شده در ۱۹ آذر ۱۳۹۵
19 سوال
0 پاسخ
8امتیاز
Share in:
1 پاسخ
  • کلاس abstract می تواند دارای ثابت، اعضا، متدهای بدون بدنه و تعریف متد باشد در حالی که کلاس interface فقط می تواند دارای ثابت ها و متدهای بدون بدنه باشد.
  • متدها و اعضای کلاس abstract می توانند با هر نوع سطح دسترسی تعریف شوند در حالی که همه متدهای کلاس interface باید به صورت public تعریف شوند(به صورت پیش فرض public هستند).
  • هنگام ارث بری یک کلاس abstract، کلاس فرزند concrete باید متدهای کلاس abstract را تعریف کند در حالیکه یک کلاس abstract می تواند دیگر کلاس های abstract را extend کند و متدهای abstract از کلاس والد لازم نیست که تعریف شوند.
  • به طور مشابه، یک interface که interface دیگر را extend می کند مسئول پیاده سازی متدهای کلاس interface والد نیست، به این دلیل که کلاس های interface نمی توانند هیچ نوع پیاده سازی را تعریف کنند.
  • یک کلاس فرزند فقط می تواند یک کلاس(abstract یا concrete) را extend کند در حالی که یک interfcae یا کلاس می تواند چندین interface را implement کند.
  • یک کلاس فرزند می تواند متدهای abstract را با سطح دسترسی مشابه یا کمتر تعریف کند در حالیکه کلاس implement کننده یک interface باید متدها را دقیقا یا سطح دسترسی مشابه(public) تعریف کند.

شبه کد کلاس interface:

// I say all motor vehicles should look like this:
interface MotorVehicle
{
    void run();

    int getFuel();
}

// My team mate complies and writes vehicle looking that way
class Car implements MotorVehicle
{

    int fuel;

    void run()
    {
        print("Wrroooooooom");
    }


    int getFuel()
    {
        return this.fuel;
    }
}

شبه کد کلاس abstract:

abstract class MotorVehicle
{

    int fuel;

    // They ALL have fuel, so why not let others implement this?
    // Let's make it for everybody.
    int getFuel()
    {
         return this.fuel;
    }

    // That can be very different, force them to provide their
    // implementation.
    abstract void run();
}

// My teammate complies and writes vehicle looking that way
class Car extends MotorVehicle
{
    void run()
    {
        print("Wrroooooooom");
    }
}

 

1
دانیال
پاسخ داده در ۲۰ آذر ۱۳۹۵
0 سوال
50 پاسخ
27امتیاز
پاسخ شماپاسخ شما با موفقیت ثبت شد.پاسخی وارد نشده است.

ارسال پاسخ