Абстрацт Цласс Вс. Интерфејс у ​​Јави: Објашњење са примерима

Апстрактне класе и интерфејси се користе за апстракцију у Јави. Апстракција у објектно оријентисаном програмирању се односи на скривање детаља имплементације од крајњих корисника.

У апстракцији, можете знати које су функционалности, али не можете знати како су имплементиране.

Хајде да погледамо сваки од њих и покушамо да разумемо зашто се користе.

Абстрацт Цласс

Класа која се не може инстанцирати као објекат и може или не мора имати апстрактне методе у себи назива се апстрактном класом у Јави. Апстрактна метода је метода која нема тело имплементације када је декларисана.

Пример апстрактне класе ГрапхицОбјецт – Орацле

Можете креирати апстрактну класу тако што ћете навести апстрактну кључну реч испред кључне речи класе.

abstract class abstractClass {
    void run() {
        System.out.println("ran");
    }
}

Апстрактна класа може бити проширена другим класама. Другим речима, може се и подкласирати.

abstract class AbstractClass {
    void run() {
        System.out.println("ran");
    }
}

class ExtendingAbstractClass extends AbstractClass {
    void newMethod() {
        System.out.println("new");
    }

    @Override
    void run() {
        System.out.println("override");
    }
}

Апстрактне класе се користе за имплементацију заједничких метода међу више класа које проширују дату апстрактну класу. Такође, могућност дефинисања апстрактних метода унутар апстрактних класа чини их невероватно корисним за класе које имају сличне методе, али са различитим имплементацијама. Узмимо пример.

Размислите о аутомобилу који има неке функције, као што су покретање, заустављање, ход уназад, итд. Ове функције су уобичајене међу свим типовима аутомобила.

Али шта је са функцијама аутоматизације као што је самовожња? Имплементација ових функционалности може се разликовати за различите типове аутомобила. Хајде да видимо како можете креирати објектно оријентисани програм који се односи на то.

  Како очистити Дисцорд кеш датотеке на десктопу и мобилном уређају

Пре свега, направите класу аутомобила која ће бити проширена за више класа различитих типова аутомобила.

abstract class Car {
    void start() {
        // implementation
        System.out.println("runs car");
    }

    void stop() {
        // implementation
        System.out.println("engine stops");
    }

    void reverse() {
        // implementation
        System.out.println("reverse mode enabled");
    }

    abstract void selfDrive();
}

Методе старт(), стоп() и реверсе() су методе које су уобичајене у свим аутомобилима. Дакле, њихова имплементација је већ дефинисана унутар саме класе Цар. Међутим, одређени тип аутомобила може имати различите имплементације режима самовожње. И тако, можете дефинисати селфДриве() као апстрактни метод и имплементирати га на различите начине у различитим класама различитих типова аутомобила.

class CarTypeA extends Car {
    @Override
    void start() {
        super.start();
    }

    @Override
    void stop() {
        super.stop();
    }

    @Override
    void reverse() {
        super.reverse();
    }

    void selfDrive() {
        // custom implementation
        System.out.println("Type A self driving mode enabled");
    }
}
class CarTypeB extends Car {
    // ...all similar methods

    void selfDrive() {
        // custom implementation
        // different implementation than CarTypeB
        System.out.println("Type B self driving mode enabled");
    }
}

Важно је напоменути да, ако поткласа не имплементира све апстрактне методе дефинисане у апстрактној класи, онда треба да буде декларисана као сама апстрактна класа.

Интерфејс

Интерфејс је начин да се каже класи које методе она мора да имплементира. На пример, ако узмете у обзир пример аутомобила, он има неке основне функције. Може да се покрене, помери и заустави. Ове функције су уобичајене у свим аутомобилима.

Дакле, ако имплементирате интерфејс аутомобила у класи, морате имплементирати све методе да би аутомобил функционисао исправно и безбедно.

Слично апстрактним класама, не можемо инстанцирати или креирати објекте интерфејса. Може се сматрати потпуно апстрактном класом јер садржи само апстрактне методе, односно методе без тела имплементације.

  Како научити солидност у 2022. – 11 курсева/ресурса

Можете креирати интерфејс користећи кључну реч интерфејс.

interface CAR {
    void start();
    void stop();
    void move();
}

Имплементирајте интерфејс користећи кључну реч имплементс када дефинишете класу.

class CarTypeB implements CAR {
    public void start() {
        System.out.println("started");
    }

    public void stop() {
        System.out.println("stopped");
    }

    public void move() {
        System.out.println("running");
    }
}

Сличност

Ниједна инстанција као објекат није једина ствар која је заједничка апстрактним класама и интерфејсима.

Разликама

Апстрактни ЦлассИнтерфацеИнхеританце & ИмплементатионСамо једну апстрактну класу може наследити класа. Класа може да имплементира више интерфејса.Вариабле ТипесМоже имати коначне, не-коначне, статичке и нестатичке променљиве.Може имати само статичке и коначне променљиве. Типови метода Може да садржи и апстрактне и неапстрактне методе. Може да садржи само апстрактне методе, али су статичке методе изузетак. Модификатори приступаАпстрактна класа може имати модификатор приступа. Потписи метода дефинисани у интерфејсу су подразумевано јавни. Интерфејс нема модификатор приступа.Конструктори и деструктори.Може да декларише конструкторе и деструкторе.Не може да декларише конструкторе или деструкторе.СпеедФастСловРазлике између апстрактне класе и интерфејса

Када користити апстрактну класу и интерфејс?

Користите апстрактне класе када:

  • Желите да делите неке заједничке методе и поља међу више класа.
  • Декларисање нестатичких и не-коначних поља како би се променило стање објекта за који су везана.

Можете користити интерфејсе када:

  • Желите да дефинишете понашање класе која имплементира интерфејс, али вас није брига за начин на који је имплементиран.
  • Желите да будете сигурни да класа имплементира све методе да би исправно функционисала.

Завршне речи

Интерфејси се углавном користе за креирање АПИ-ја јер могу пружити структуру за имплементацију функционалности без бриге о стварној имплементацији.

Апстрактне класе се генерално користе за дељење заједничких апстрактних и неапстрактних метода међу више класа, које проширују апстрактну класу како би код учиниле више употребљивим.

  Сегментација мреже објашњена у лаичком термину

Сазнајте више о Јави уз помоћ ових онлајн курсева за Јаву. Да ли се спремате за интервју на Јави? Ево неколико питања за интервју о објектно оријентисаном програмирању.