Sažetak klase i sučelja primarno se koriste za apstrakciju, no vrlo su različiti jedni od drugih. Oboje su temeljni dio Jave, ali imaju vlastite aplikacije. Iako su oba termina međusobno sinonim, ne mogu se međusobno koristiti.
Postoje značajne razlike između to dvoje. Iako je metoda sučelja prema zadanim postavkama apstraktna, sažetak može sadržavati i apstraktne i ne-apstraktne metode. Pa, budući da je Java 8, sučelja također imaju implementacije metoda i mogu imati statičke i zadane metode u Javi. Proučimo detaljno razliku između to dvoje.
Apstraktna klasa u Javi je klasa koja se proglašava apstraktnom - može ili ne mora sadržavati apstraktne metode. Prilično je slično Java sučelju, osim činjenice da može sadržavati zadanu implementaciju metode. Kao i kod objektno orijentiranog programiranja, apstrakcija u Javi postiže se pomoću apstraktnih klasa i sučelja. U Javi apstrakcija znači skrivanje nebitnih detalja od korisnika kako bi se usredotočili samo na bitne detalje kako bi se povećala učinkovitost, a time smanjila složenost. Ključna riječ "sažetak" koristi se za stvaranje apstraktne klase neposredno prije ključne riječi klase u deklaraciji klase.
Apstraktna klasa može ili ne mora sadržavati metode apstrakcije (metode bez tijela), ali ako klasa ima barem jednu metodu apstrakcije, mora se proglasiti apstraktnom. No, ne-apstraktne metode mogu se koristiti i u apstraktnoj klasi, ali samo za provedbu zadanog ponašanja. Metode u apstraktnoj klasi mogu imati modifikatore pristupa poput privatnih, javnih, statičkih i zaštićenih, ovisno o razini vidljivosti. Sažetak klase ne može biti primjeren i ne pruža 100-postotnu apstrakciju zbog činjenice da može imati konkretnu metodu.
Iako sučelje izgleda kao klasa, to nije. Kako Java ne podržava više nasljeđivanja, sučelje je ponekad idealno za osiguravanje baze hijerarhije klase. Sučelje je više nacrt klase koja se također koristi za postizanje apstrakcije u Javi. Sadrži apstraktne metode i statičke konstante. Jednostavno rečeno, sučelje je skup apstraktnih metoda koje se koriste za određivanje ponašanja koje klasa mora implementirati. Za razliku od apstraktne klase, sučelje pruža potpunu apstrakciju u Javi. Može imati i metode i varijable poput klase, međutim metode deklarirane u sučelju su prema zadanim postavkama apstraktne.
Sažetak klase | Sučelje |
Apstraktna ključna riječ koristi se za stvaranje apstraktne klase i može se koristiti metodama. | Ključna riječ sučelja koristi se za stvaranje sučelja, ali ne može se koristiti metodama. |
Razred može proširiti samo jednu apstraktnu klasu. | Razred može implementirati više sučelja. |
Apstraktni razred može imati i apstraktne i ne-apstraktne metode. | Sučelje može imati samo apstraktne metode. |
Varijable prema zadanom nisu konačne. Može sadržavati ne-konačne varijable. | Varijable su zadano u zadanom sučelju. |
Apstraktna klasa može osigurati implementaciju sučelja. | Sučelje ne može osigurati implementaciju apstraktne klase. |
Može imati metode s implementacijama. | Pruža apsolutnu apstrakciju i ne može imati implementacije metoda. |
Može imati javne, privatne, statičke i zaštićene modifikatore pristupa. | Metode su implicitno javne i apstraktne u Java sučelju. |
Ne podržava više nasljedstva. | Podržava više nasljedstva. |
Idealan je za ponovnu upotrebu koda i perspektivu evolucije. | Idealan je za deklaraciju tipa. |
I apstraktna klasa i sučelje koriste se za apstrakciju; međutim, oni imaju pravičan udio u razlikama. Glavna razlika između njih nalazi se metodama apstrakcije. Dok prve mogu ili ne moraju imati apstraktne metode, druge su implicitno apstraktne. Apstraktna klasa može imati i apstraktne i ne-apstraktne metode. S druge strane, sučelje može imati samo apstraktne metode, pa ne može imati implementaciju, što jednostavno znači da sučelje ne može imati ne-apstraktne metode. Sažetak klase ne može biti primjeren što zabranjuje stvaranje objekta. S druge strane, sučelje može izgledati kao klasa, ali nije.