Abstraktā klase vs. Interfeiss Java: skaidrojums ar piemēriem

Abstrakcijai Java tiek izmantotas abstraktās klases un saskarnes. Abstrakcija objektorientētā programmēšanā attiecas uz ieviešanas detaļu slēpšanu no gala lietotājiem.

Abstrakcijā jūs varat zināt, kādas ir funkcionalitātes, bet jūs nevarat zināt, kā tās tika ieviestas.

Apskatīsim katru no tiem un mēģināsim saprast, kāpēc tie tiek izmantoti.

Abstraktā klase

Klase, kuru nevar izveidot kā objektu un kurā var būt vai var nebūt abstraktas metodes, Java sauc par abstraktu klasi. Abstraktā metode ir metode, kurai nav ieviešanas struktūras, kad tā ir deklarēta.

Abstraktas klases GraphicObject piemērs – Oracle

Varat izveidot abstraktu klasi, pirms klases atslēgvārda norādot abstrakto atslēgvārdu.

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

Abstrakto klasi var paplašināt ar citām klasēm. Citiem vārdiem sakot, to var arī iedalīt apakšklasē.

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

Abstraktās klases tiek izmantotas, lai ieviestu kopīgas metodes vairākās klasēs, kas paplašina noteiktu abstrakto klasi. Turklāt spēja definēt abstraktās metodes abstraktās klasēs padara tās neticami noderīgas klasēm, kurām ir līdzīgas metodes, bet ar atšķirīgu ieviešanu. Ņemsim piemēru.

  Kā pakalpojumā WordPress novērst renderēšanu bloķējošos resursus [Plugins or Manually]

Apsveriet automašīnu, kurai ir dažas funkcijas, piemēram, iedarbināšana, apturēšana, atpakaļgaita utt. Šīs funkcijas ir izplatītas visu veidu automašīnām.

Bet kā ar automatizācijas funkcijām, piemēram, pašbraukšanu? Šo funkciju ieviešana dažādiem automašīnu veidiem var atšķirties. Apskatīsim, kā jūs varat izveidot ar to saistītu objektorientētu programmu.

Pirmkārt, izveidojiet automašīnu klasi, kas tiks papildināta ar vairākām dažādu automašīnu tipu klasēm.

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();
}

Metode start(), stop() un reverse() ir metodes, kas ir izplatītas visās automašīnās. Tātad to ieviešana jau ir definēta pašā Car klasē. Tomēr noteikta veida automašīnām var būt dažādas pašbraukšanas režīma ieviešanas. Tādējādi jūs varat definēt selfDrive() kā abstraktu metodi un ieviest to dažādos veidos dažādās dažāda veida automašīnu klasēs.

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

Ir svarīgi atzīmēt, ka, ja apakšklase neīsteno visas abstraktās metodes, kas definētas abstraktajā klasē, tā ir jādeklarē kā abstrakta klase.

  12 labākā animācijas programmatūra, lai izveidotu skaidrojošu video

Interfeiss

Interfeiss ir veids, kā norādīt klasei, kuras metodes tai jāīsteno. Piemēram, ja ņemat vērā automašīnas piemēru, tai ir dažas pamatfunkcijas. Tas var sākt, kustēties un apstāties. Šīs funkcijas ir izplatītas visās automašīnās.

Tātad, ja ieviešat automašīnas saskarni klasē, jums ir jāievieš visas metodes, lai automašīna darbotos pareizi un droši.

Līdzīgi kā abstraktās klasēs, mēs nevaram izveidot vai izveidot saskarnes objektus. To var uzskatīt par pilnībā abstraktu klasi, jo tajā ir tikai abstraktas metodes, ti, metodes bez ieviešanas korpusa.

Interfeisu var izveidot, izmantojot interfeisa atslēgvārdu.

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

Ieviesiet saskarni, definējot klasi, izmantojot implements atslēgvārdu.

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

Līdzība

Abstraktām klasēm un interfeisiem ir kopīga neviena instantiācija kā objekts.

Atšķirības

Abstraktās klases interfeisa mantošana un ieviešana Klase var mantot tikai vienu abstraktu klasi. Klase var ieviest vairākas saskarnes. Mainīgo veidiTam var būt galīgie, negalīgie, statiskie un nestatiskie mainīgie. Tam var būt tikai statiski un galīgie mainīgie. Metožu veidiTā var saturēt gan abstraktas, gan neabstraktas metodes.Tā var ietvert tikai abstraktas metodes, bet statiskās metodes ir izņēmums.Piekļuves modifikatori Abstraktai klasei var būt piekļuves modifikators.Safetē definētie metožu paraksti pēc noklusējuma ir publiski. Saskarnei nav piekļuves modifikatora.Konstruktori un iznīcinātājiTā var deklarēt konstruktorus un iznīcinātājus.Tā nevar deklarēt konstruktorus vai iznīcinātājus.SpeedFastSlowAtšķirības starp abstrakto klasi un saskarni

  Iespējojiet sākumlapu, mapes un lietotņu informāciju Chrome lietotņu palaidējā

Kad izmantot abstrakto klasi un saskarni?

Izmantojiet abstraktās klases, ja:

  • Jūs vēlaties koplietot dažas izplatītas metodes un laukus vairākās klasēs.
  • Nestatisku un negalīgu lauku deklarēšana, lai mainītu objekta stāvokli, ar kuru tie ir saistīti.

Saskarnes var izmantot, ja:

  • Jūs vēlaties definēt klases, kas ievieš saskarni, uzvedību, taču jūs neinteresē veids, kādā tā tiek ieviesta.
  • Jūs vēlaties pārliecināties, vai klase ievieš visas metodes, lai tā darbotos pareizi.

Nobeiguma vārdi

Saskarnes galvenokārt tiek izmantotas, lai izveidotu API, jo tās var nodrošināt struktūru funkcionalitātes ieviešanai, neuztraucoties par faktisko ieviešanu.

Abstraktās klases parasti izmanto, lai koplietotu abstraktās un neabstraktās metodes starp vairākām klasēm, kas paplašina abstrakto klasi, lai padarītu kodu vairāk izmantojamu.

Uzziniet vairāk par Java, izmantojot šos tiešsaistes java kursus. Vai jūs gatavojaties intervijai par Java? Šeit ir daži intervijas jautājumi par objektorientēto programmēšanu.