2010-03-03 12 views
1

Мне кажется, что оба interface и abstract function очень похожи,интерфейс и абстрактный общественные функции

это как для того, чтобы какой-то метод должен быть реализован,

так какая разница?

+0

Duplicates http://stackoverflow.com/questions/1221512/abstract-class-and-interface-class –

+0

Другой дубликат http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general- oo –

+0

Извините, это ** опечатка **, я имею в виду 'абстрактная функция' – user198729

ответ

6

Have a look at this.

Цитирование: (Very Good Explantion по электронной Satis)

Интерфейс

Интерфейс представляет собой договор: парень писать интерфейс сказать: «Эй, Я согласен с тем, что выглядит так », а парень, использующий интерфейс, говорит« ОК, класс, который я пишу, выглядит так ».

И интерфейс пустой оболочки, существуют только подписи (имя/params/return type) методов. Методы ничего не содержат. Интерфейс ничего не может сделать. Это всего лишь образец.

например (псевдо-код):

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

    int getFuel(); 
} 

// my team mate complies and write vehicle looking that way 
class Car implements MotoVehicle 
{ 

    int fuel; 

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


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

Реализация интерфейса потребляют очень мало CPU, потому что это не класс, просто куча имен, и для них нет дорогой поиска, чтобы сделать. Это здорово, когда это имеет значение, например, во встроенных устройствах.

Абстрактные классы

абстрактные классы, в отличие от интерфейсов, классы. Есть более дорогие в использовании, потому что есть поиск, когда вы наследуете их.

Абстрактные классы очень похожи на интерфейсы, но у них есть что-то еще: вы можете определить поведение для них. Это больше о парне, который говорит: «Эти классы должны выглядеть так, и они получили это вместе, так что заполните пробелы!».

например:

// I say all motor vehicles should look like that : 
abstract class MotorVehicle 
{ 

    int fuel; 

    // they ALL have fuel, so why let others implement that ? 
    // 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 team mate complies and write vehicle looking that way 
class Car extends MotorVehicule 
{ 
    void run() 
    { 
     print("Wrroooooooom"); 
    } 
} 

By: https://stackoverflow.com/users/9951/e-satis

1

В языках без множественного наследования, разница очень важна. В терминах php или Java класс может реализовывать несколько интерфейсов, но может наследовать только один родительский класс, который может быть абстрактным.

В C++, например, различие становится менее важным.