Abstraktās klases un saskarnes galvenokārt tiek izmantotas abstrakcijai, tomēr tās ir ļoti atšķirīgas viena no otras. Abas ir Java galvenā sastāvdaļa, taču tām ir savas lietojumprogrammas. Lai arī abi termini var būt sinonīmi viens otram, tos nevar izmantot savstarpēji aizstājot.
Starp abiem pastāv būtiskas atšķirības. Kaut arī saskarnes metode pēc noklusējuma ir abstrakta, abstrakts var saturēt gan abstraktas, gan abstraktas metodes. Kopš Java 8, saskarnēm ir arī metožu ieviešana, un Java tām var būt gan statiskas, gan noklusējuma metodes. Detalizēti izpētīsim atšķirību starp abiem.
Abstrakta klase Java ir klase, kas tiek pasludināta par abstraktu - tajā var būt vai nebūt abstraktas metodes. Tas ir diezgan līdzīgs Java interfeisam, izņemot to, ka tajā var būt noklusējuma metodes ieviešana. Līdzīgi kā objektorientētā programmēšanā, Java abstrakcija tiek panākta, izmantojot abstraktas klases un saskarnes. Java valodā abstrakcija nozīmē nesvarīgu detaļu slēpšanu no lietotāja, lai koncentrētos tikai uz būtiskām detaļām, lai palielinātu efektivitāti, tādējādi samazinot sarežģītību. Atslēgvārds “abstrakts” tiek izmantots, lai izveidotu abstraktu klasi tieši pirms klases atslēgvārda klases deklarācijā.
Abstraktā klase var saturēt vai nevar saturēt abstrakcijas metodes (metodes bez ķermeņa), bet, ja klasei ir vismaz viena abstrakcijas metode, tā ir jāpasludina par abstraktu. Tomēr neabstraktās metodes var izmantot arī tikai abstraktajā klasē, bet tikai, lai ieviestu noklusējuma izturēšanos. Abstraktās klases metodēm var būt piekļuves pārveidotāji, piemēram, privāti, publiski, statiski un aizsargāti, atkarībā no redzamības līmeņa. Abstraktu klasi nevar paātrināt, un tā nenodrošina simtprocentīgu abstrakciju, jo tai var būt konkrēta metode.
Lai arī interfeiss izskatās kā klase, tā nav. Tā kā Java neatbalsta vairākus mantojumus, interfeiss dažreiz ir ideāls, lai nodrošinātu klases hierarhijas bāzi. Interfeiss ir vairāk par klases projektu, kuru arī izmanto, lai Java iegūtu abstrakciju. Tas satur abstraktas metodes un statiskas konstantes. Vienkārši izsakoties, saskarne ir abstraktu metožu kopums, ko izmanto, lai norādītu uzvedību, kas klasei jāīsteno. Atšķirībā no abstraktās klases, interfeiss Java nodrošina pilnīgu abstrakciju. Tam var būt gan metodes, gan mainīgie tāpat kā klasei, tomēr interfeisā deklarētās metodes pēc noklusējuma ir abstraktas.
Abstraktā klase | Saskarne |
Abstraktu atslēgu izmanto, lai izveidotu abstraktu klasi, un to var izmantot ar metodēm. | Interfeisa atslēgvārds tiek izmantots interfeisa izveidošanai, bet to nevar izmantot ar metodēm. |
Klase var paplašināt tikai vienu abstraktu klasi. | Klase var ieviest vairāk nekā vienu saskarni. |
Abstraktajai klasei var būt gan abstraktas, gan neabstraktas metodes. | Saskarnei var būt tikai abstraktas metodes. |
Pēc noklusējuma mainīgie nav galīgi. Tas var saturēt galīgos mainīgos. | Pēc noklusējuma interfeisā mainīgie ir galīgi. |
Abstrakta klase var nodrošināt interfeisa ieviešanu. | Saskarne nevar nodrošināt abstraktas klases ieviešanu. |
Tam var būt metodes ar ieviešanu. | Tas nodrošina absolūtu abstrakciju, un tam nevar būt metožu ieviešanas. |
Tam var būt publiski, privāti, statiski un aizsargāti piekļuves pārveidotāji. | Metodes ir netieši publiskas un abstraktas Java saskarnē. |
Tas neatbalsta vairākus mantojumus. | Tas atbalsta vairākus mantojumus. |
Tas ir ideāli piemērots koda atkārtotai izmantošanai un evolūcijas perspektīvai. | Tas ir ideāli piemērots tipa deklarēšanai. |
Abstrakcijai tiek izmantota abstrakta klase un interfeiss; tomēr viņiem ir diezgan liela atšķirību daļa. Galveno atšķirību starp abām rada abstrakcijas metodes. Lai gan pirmajam var būt vai nevar būt abstraktas metodes, pēdējam ir netieši abstrakts raksturs. Abstraktajai klasei var būt gan abstraktas, gan neabstraktas metodes. No otras puses, saskarnei var būt tikai abstraktas metodes, tāpēc tām nevar būt ieviešanas, kas vienkārši nozīmē, ka saskarnei nevar būt abstraktas metodes. Nevar realizēt abstraktu klasi, kas aizliedz izveidot objektu. No otras puses, saskarne var izskatīties kā klase, bet tā nav.