Интерфейс и абстрактная публичная функция - PullRequest
1 голос
/ 03 марта 2010

Мне кажется, что и interface, и abstract function очень похожи,

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

так в чем же разница?

Ответы [ 2 ]

6 голосов
/ 03 марта 2010

Посмотрите на это.

Цитата: (Очень хорошее объяснение от e-sat)

Интерфейс

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

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

E.G (псевдокод):

// 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;
    }
}

Реализация интерфейса потребляет очень мало ресурсов ЦП, потому что это не класс, а просто набор имен, и поэтому нет дорогостоящего поиска. Замечательно, когда это важно, например, во встроенных устройствах.

Абстрактные занятия

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

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

например:

// 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");
    }
}

По: https://stackoverflow.com/users/9951/e-satis

1 голос
/ 03 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...