Razlika između sučelja i apstraktne klase u Java & C #

Autor: Laura McKinney
Datum Stvaranja: 1 Travanj 2021
Datum Ažuriranja: 8 Svibanj 2024
Anonim
Razlika između sučelja i apstraktne klase u Java & C # - Tehnologija
Razlika između sučelja i apstraktne klase u Java & C # - Tehnologija

Sadržaj


Sučelje i klasa Sažetak doprinose "nepotpunom tipu" u OOP-u. Ponekad nam je potreban superrazred kako bismo definirali "što učiniti", ali ne "kako to učiniti", to će kako to učiniti, implementirat će izvedena klasa prema svojim potrebama, "sučelje"Pružiti rješenje za to. Ponekad nam je potrebna klasa superklase koja definira neku generaliziranu strukturu koju mogu implementirati izvedene klase i neku određenu strukturu koja se može koristiti izvedenim klasama, "apstraktna klasa"Pruža rješenje za to. Temeljna razlika između sučelja i apstraktne klase je ta što je sučelje potpuno nepotpuno, a apstraktna klasa djelomično nepotpuna.

  1. Usporedni grafikon
  2. definicija
  3. Ključne razlike
  4. Zaključak

Usporedni grafikon

Osnove za usporedbuSučeljeSažetak klase
Osnovni, temeljniKad imate samo znanje o zahtjevima, a ne o njegovoj primjeni, koristite "sučelje".Kad djelomično znate o implementacijama, koristite "Sažetak nastave".
metodeSučelje sadrži samo apstraktne metode.Sažetak predavanja sadrži apstraktne metode kao i konkretne metode.
Pristupni modifikator metodaMetode sučelja uvijek su "Javne" i "Sažetak", čak i ako se ne izjasnimo. Stoga se može reći da je 100%, čista apstraktna klasa.Nije obvezno da će metoda u apstraktnom razredu biti javna i apstraktna. Može imati i konkretne metode.
Ograničeni modifikator za metodeMetoda sučelja se ne može deklarirati sa sljedećim modifikatorima:
Javno: privatno i zaštićeno
Sažetak: završni, statički, sinkronizirani, izvorni, striktni.
Ne postoje ograničenja modifikatora varijable apstraktne klase.
Modifikator pristupa varijabliDopušteni modifikator dopušten za varijable sučelja je javni, statički i konačni bez obzira na to izjavljujemo li ili ne.Promjenjive apstraktne klase ne moraju biti javne, statičke i konačne.
Ograničeni modifikatori za varijableVarijable sučelja se ne mogu deklarirati kao privatne, zaštićene, prolazne, nestabilne.Ne postoji ograničenje na modifikatorima apstraktnih varijabli klase.
Inicijalizacija varijabliVarijable sučelja moraju se inicijalizirati u vrijeme njegove deklaracije.Nije obvezno da se apstraktne varijable klase moraju inicijalizirati u trenutku njegove deklaracije.
Instančni i statički blokoviUnutar sučelja ne možete deklarirati instancu ili statički blok.Sažetak klase omogućuje instancu ili statički blok unutar nje.
graditeljiNe možete prijaviti konstruktor unutar sučelja.Konstruktor možete proglasiti unutar apstraktne klase.


Definicija sučelja

Java ne dopušta više nasljeđivanja. Odnosno, jedna klasa ne može naslijediti više klasa odjednom. Razlog tome može se objasniti primjerom. Pretpostavimo da imamo dvije roditeljske klase, A i B i izvedenu klasu C. Derivirana klasa C nasljeđuje i klase A i B.Sada, obje imaju klase A i B imaju postavljenu metodu (), tada će za klasu C biti pitanje koja metoda klase set () bi trebala naslijediti. Rješenje ovog problema je "sučelje".

Sučelje je čista apstraktna klasa. Ključna riječ koja se koristi za stvaranje sučelja je "sučelje". Kao i sve metode unutar sučelja su potpuno apstraktne. Sučelje samo određuje što klasa mora raditi, ali ne određuje kako se ona radi. Samo zato što su sve metode deklarirane unutar sučelja apstraktne, ne stvara se nijedna instanca. Opći oblik "sučelja" u Javi je:


access_specifier sučelje sučelje_ime {return-type method-name1 (popis parametara); metoda povratnog tipa-name2 (lista parametara); upišite final-varname1 = vrijednost; upišite final-varname2 = vrijednost; // ... metoda povratnog tipa-nameN (popis parametara); upišite final-varnameN = vrijednost; }

Specifikator pristupa proglašen je javnim jer klase trebaju implementirati sučelje.

U C ++ nemamo koncept "sučelja". Ali, Java i C # definiraju sučelje vrlo dobro.

Sučelje na Javi:

  • Varijable sučelja prema zadanim postavkama uvijek su javne, statične i konačne.
  • Varijable se moraju inicijalizirati u vrijeme njene deklaracije.
  • Varijable se nikada ne mogu deklarirati kao privatne, zaštićene, prolazne i nestabilne.
  • Metode sučelja uvijek su javne i apstraktne, dok se one nikada ne mogu deklarirati kao privatne, zaštićene, konačne, statične, sinkronizirane, izvorne i stroge.
  • Ne možete proglasiti nijedan konstruktor unutar sučelja jer je glavna svrha konstruktora inicijalizacija varijabli klase, ali se varijable sučelja inicijaliziraju u vrijeme njegove deklaracije.
  • Sučelje može naslijediti druga sučelja, ali klasa koja implementira takvo sučelje mora implementirati metode svih naslijeđenih sučelja.
  • Klasa može naslijediti više sučelja istodobno i ona mora implementirati sve metode svih naslijeđenih sučelja.

Opći oblik implementacije sučelja u Javi:

class class_name implementira interfejs_ime {// class-body}

Za nasljeđivanje sučelja klasa koristi ključnu riječ "implementacije", a klasa implementira svu metodu koju deklarira naslijeđeno sučelje.

Sučelje u C #:

Sučelje u C # gotovo su slično sučelju u Javi osim:

  • Sučelje u C # ne deklarira varijable.
  • Naziv sučelja je prefiks velikim slovom I i nasljeđuje se dvotočkom (:) znak.

Opći oblik implementacije sučelja u C #:

class class_name: sučelje_ime {// class-body}

Definicija apstraktne klase

Klasa koja sadrži jednu ili više apstraktnih metoda naziva se apstraktna klasa, a klasa je deklarirana kao apstraktna pomoću ključne riječi "sažetak", a ispred nje je ključna riječ "klasa" na početku deklaracije klase. Kako apstraktna klasa sadrži apstraktnu metodu, čini se nepotpunom tipu. Dakle, ne možete stvarati objekte apstraktne klase. Kad god klasa nasljeđuje apstraktnu klasu, ona mora implementirati sve apstraktne metode apstraktne klase, ako ne, onda se mora deklarirati i kao apstraktna. Apstraktni atribut nasljeđuje se do potpune primjene apstraktnih metoda.

Apstraktna klasa može sadržavati i konkretne metode koje se izvedenom klasom mogu koristiti onakvom kakva jest. Ali, ne možete deklarirati apstraktni konstruktor ili apstraktnu statičku metodu unutar apstraktne klase. Opći oblik apstraktne klase u Javi je sljedeći:

apstraktna klasa class_name {apstraktna metoda_ime1 (); sažetak method_name2 (); : return_type method_name3 (parametar_list) {// metoda betona} return_type method_name4 (parametar_list) {// metoda betona}};

Koncept apstraktne klase sličan je i u Javi i u C #. Apstraktna klasa je malo drugačija u C ++.

U C ++ ako klasa ima barem jednu virtualnu funkciju, klasa postaje apstraktna klasa. Umjesto ključne riječi "sažetak", za proglašavanje apstraktne metode koristi se ključna riječ "virtualna".

  1. Kad imate znanje o "onome što je potrebno", ali ne i "kako bi se to provelo", tada se mora koristiti sučelje. S druge strane, ako znate što je potrebno i djelomično znate kako bi se to provelo, koristite apstraktnu klasu.
  2. Sučelje ima sve svoje metode apstraktne, ali apstraktna klasa ima neke apstraktne metode i neke konkretne metode.
  3. Metode unutar sučelja su javne i apstraktne, pa se naziva i čistom apstraktnom klasom. S druge strane, metode apstraktnog rada nisu ograničene samo na javne i apstraktne.
  4. Metoda sučelja nikada ne može biti privatna, zaštićena, konačna, statička, sinkronizirana, izvorna ili stroga. S druge strane, ne postoje ograničenja u metodama apstraktne klase.
  5. Varijable u sučelju su javne i konačne bez obzira da li ih izjavljujemo ili ne, dok ne postoje takva ograničenja na varijable apstraktne klase da su javne i konačne.
  6. Varijable u sučelju nikada ne mogu biti privatno zaštićene prolazne ili nestabilne, dok u apstraktnom razredu nema ograničenja na varijable.
  7. Promjena sučelja mora se inicijalizirati tijekom deklariranja. S druge strane, varijable u apstraktnoj klasi mogu se inicijalizirati u bilo koje vrijeme.
  8. Unutar sučelja se instanca ili statički blok ne mogu deklarirati, ali možete izjaviti instancu ili statički blok unutar apstraktne klase.
  9. Ne možete definirati konstruktor unutar sučelja dok konstruktor možete definirati unutar apstraktne klase.

Zaključak:

Kada trebate stvoriti osnovnu klasu koja sadrži generalizirani oblik metoda koje se izvedene klase mogu implementirati prema njihovim potrebama, koncept sučelja i apstraktna klasa pomažu u tome.