Ključna razlika: sučelje ili protokol je uobičajeni način koji omogućuje nepovezanim objektima međusobno komuniciranje. On predstavlja dogovoreno ponašanje koje olakšava interakciju između dva objekta. Apstraktna klasa je klasa objekata koji se ne mogu instancirati niti postaviti instancu objekta. Ova klasa možda nema implementaciju ili može imati nepotpunu implementaciju.
Java je programski jezik, na koji je utjecao jezik C. Većinu sintakse proizlazi iz C i C ++, ali ima manje objekata niže razine od bilo koje. Java je programski jezik opće namjene koji je dizajniran tako da ima manje ovisnosti o implementaciji u odnosu na prethodne jezike. To je istodobno, na temelju klasa i objektno orijentiranog jezika.
Java je razvio James Gosling u tvrtki Sun Microsystems, a izdana je 1995. godine. Izvorno je izdana kao temeljna komponenta Java platforme Sun Microsystems. Sun je od tada ponovno licencirao većinu svojih Java tehnologija pod GNU Općom javnom licencom. To znači da je sva tehnologija licencirana pod GNU Općom javnom licencom otvorenog koda i općenito dostupna besplatno. Sun Microsystems se na kraju spojio u Oracle Corporation. Od 2012. godine Java je postala jedan od najpopularnijih programskih jezika za upotrebu. To posebno vrijedi za klijent-poslužitelj web aplikacije. Mnogi drugi sustavi razvili su alternativne implementacije Sun tehnologija, kao što su GNU Compiler za Java i GNU Classpath.
Apstraktna klasa je klasa objekata koji se ne mogu instancirati niti postaviti instancu objekta. Ova klasa možda nema implementaciju ili može imati nepotpunu implementaciju. Također može imati apstraktne metode ili svojstva koja su zajednička svim pod-klasama. U nekim programskim jezicima, apstraktni tipovi bez implementacije poznati su kao sučelja. U Javi se apstraktni tip može stvoriti pomoću ključne riječi 'abstract' u definiciji klase. Svrha je imati apstraktnu klasu za postavljanje svih metoda koje nisu implementirane u apstraktnu klasu i prepustiti podklasi da odredi kako implementirati te klase. Ako klasa ima jednu apstraktnu metodu, klasa mora biti deklarirana kao apstraktna klasa, iako ne treba imati barem jednu metodu za deklariranje sažetka razreda.
Malliktalksjava.in navodi glavne razlike između sučelja i apstrakta kao:
- Apstraktna klasa ima konstruktora, ali sučelje ne.
- Apstraktne klase mogu imati implementacije za neke od svojih članova (Methods), ali sučelje ne može imati implementaciju ni za jednog člana.
- Apstraktna nastava bi trebala imati podklase koji bi bili beskorisni.
- Sučelja moraju imati implementacije drugih klasa koje će biti beskorisne
- Samo sučelje može proširiti drugo sučelje, ali svaka klasa može proširiti apstraktnu klasu.
- Sve su varijable u sučeljima konačne
- Sučelja pružaju oblik višestrukog nasljeđivanja. Klasa može proširiti samo još jednu klasu.
- Sučelja su ograničena na javne metode i konstante bez implementacije. Apstraktne klase mogu imati djelomičnu implementaciju, zaštićene dijelove, statičke metode itd.
- Klasa može implementirati nekoliko sučelja. Ali u slučaju apstraktne klase, klasa može proširiti samo jedan apstraktni razred.
- Sučelja su spora jer zahtijeva dodatnu indirektnost kako bi se pronašla odgovarajuća metoda u stvarnoj klasi. Nastava apstrakta je brza.
- Modifikator pristupačnosti (javno / privatno / interno) dopušten je za apstraktnu klasu. Sučelje ne dopušta modifikator pristupačnosti
- Apstraktna klasa može sadržavati potpune ili nepotpune metode. Sučelja mogu sadržavati samo potpis metode, ali ne i tijelo. Tako apstraktna klasa može implementirati metode, ali sučelje ne može implementirati metode.
- Apstraktna klasa može sadržavati polja, konstruktore, ili destruktore i svojstva implementacije. Sučelje ne može sadržavati polja, konstruktore ili destruktore i ima samo potpis vlasništva, ali nema implementacije.
- Različiti modifikatori pristupa kao što su sažetak, zaštita, interni, javni, virtualni itd. Korisni su u apstraktnim razredima, ali ne u sučeljima.
- Područje apstrakta je do izvedene klase.
- Opseg sučelja je do bilo koje razine njegovog lanca nasljeđivanja.
Informacije za tablicu su zahvaljujući codeproject.com i mindprod.com
Sučelje | Klasa sažetaka | |
Višestruko nasljeđivanje | Klasa može naslijediti nekoliko sučelja. | Klasa može naslijediti samo jednu apstraktnu klasu. |
Zadana implementacija | Sučelje ne može pružiti nikakav kod, samo potpis. | Apstraktna klasa može osigurati potpuni, zadani kôd i / ili samo detalje koji se moraju nadjačati. |
Modifikatori pristupa | Sučelje ne može imati modifikatore pristupa za subs, funkcije, svojstva itd. Sve se pretpostavlja kao javno. | Apstraktna klasa može sadržavati modifikatore pristupa za subs, funkcije, svojstva. |
Jezgra u odnosu na periferne | Sučelja se koriste za definiranje perifernih sposobnosti klase. Drugim riječima, i čovjek i vozilo mogu naslijediti od sučelja koje je moguće umetnuti. | Apstraktna klasa definira temeljni identitet klase i on se koristi za objekte istog tipa. |
Homogenost | Ako različite implementacije dijele samo potpise metode, bolje je koristiti sučelja. | Ako su različite implementacije iste vrste i koriste zajedničko ponašanje ili status, onda je apstraktna klasa bolje koristiti. |
Ubrzati | Zahtijeva više vremena za pronalaženje stvarne metode u odgovarajućim klasama. | Brzo |
Dodavanje funkcionalnosti | Ako dodamo novu metodu sučelju, moramo pronaći sve implementacije sučelja i definirati implementaciju za novu metodu. | Ako dodamo novu metodu apstraktnoj klasi, tada imamo opciju pružanja zadane implementacije i stoga bi sav postojeći kôd mogao ispravno raditi. |
Polja i konstante | Polja ne mogu biti definirana u sučeljima. | Apstraktna klasa može imati definirana polja i konstante. |
Sažetost | Deklaracije konstanta u sučelju su sve pretpostavljene javne statičke konačne. | Dijeljeni kod može se dodati u apstraktnu klasu. |
konstante | Samo statične konačne konstante mogu ih koristiti bez kvalifikacija u klasama koje implementiraju sučelje. | Moguće su i instance i statičke konstante. I statički i primjerni intialiser kod su također moguće izračunati konstante. |
Pogodnost treće strane | Implementacija sučelja može se dodati bilo kojem postojećem razredu treće strane. | Klasa treće strane mora biti ponovno napisana kako bi se proširila samo iz apstraktne klase. |
is-a vs. -able ili can-do | Sučelja se često koriste za opisivanje perifernih sposobnosti klase, a ne za njezin središnji identitet, npr. Klasa Automobile može implementirati sučelje za recikliranje, koje bi se moglo primijeniti na mnoge inače potpuno nepovezane objekte. | Apstraktna klasa definira temeljni identitet njegovih potomaka. Implementirana sučelja nabrajaju opće stvari koje klasa može učiniti, a ne ono što je klasa. U kontekstu Java, korisnici bi obično trebali implementirati Runnable sučelje umjesto proširivanja Thread-a, jer oni zapravo nisu zainteresirani za pružanje neke nove Thread funkcionalnosti, oni obično samo žele da neki kod ima sposobnost samostalnog pokretanja. Žele stvoriti nešto što se može izvoditi u niti, a ne u novoj vrsti niti. Slična je-a vs ima-raspravu dolazi kada odlučite naslijediti ili delegirati. |
Uključiti | Korisnik može napisati novi zamjenski modul za sučelje koje ne sadrži niti jedan štapić koda koji je zajednički s postojećim implementacijama. Kada korisnik implementira sučelje, oni počinju od nule bez ikakve zadane implementacije. Korisnik mora pribaviti alate iz drugih klasa; ništa ne dolazi sa sučeljem osim nekoliko konstanti. To korisniku daje slobodu da implementira radikalno drugačiji unutarnji dizajn. | Korisnik mora koristiti apstraktnu klasu kao-je za bazu koda, sa svom pratećom prtljagom, dobrom ili lošom. Autor apstraktne klase je korisniku nametnuo strukturu. |
Održavanje | Ako kod klijenta govori samo u smislu sučelja, možete jednostavno promijeniti konkretnu implementaciju iza nje, koristeći tvorničku metodu. | Ako kod klijenta razgovara samo u smislu apstraktne klase, lako možete promijeniti konkretnu implementaciju iza nje, koristeći tvorničku metodu. |