Abstraktinė klasė ir sąsaja pirmiausia yra naudojami abstrakcijai, tačiau jie labai skiriasi. Jie abu yra pagrindinė „Java“ dalis, tačiau turi savo programas. Nors abu terminai gali būti sinonimai, jie negali būti vartojami pakaitomis.
Tarp šių dviejų ženkliai skiriasi. Nors sąsajos metodas pagal nutylėjimą yra abstraktus, abstraktus gali būti ir abstraktus, ir neabstraktas metodas. Na, nuo „Java 8“ sąsajos taip pat turi metodų įgyvendinimus ir „Java“ jie gali turėti ir statinius, ir numatytuosius metodus. Išsamiau išnagrinėsime skirtumą tarp šių dviejų.
„Java“ abstrakčioji klasė yra klasė, kuri skelbiama abstrakčia - joje gali būti abstrakčių metodų arba jų nėra. Tai gana panaši į „Java“ sąsają, išskyrus tai, kad joje gali būti numatytasis metodo įgyvendinimas. Kaip ir objektinio programavimo atveju, „Java“ abstrakcija pasiekiama naudojant abstrakčias klases ir sąsajas. „Java“ versijoje abstrakcija reiškia, kad nesvarbios detalės slepiamos nuo vartotojo, kad būtų galima sutelkti dėmesį tik į esmines detales, kad padidintumėte efektyvumą ir sumažintumėte sudėtingumą. Raktinis žodis „abstraktus“ naudojamas abstrakčiai klasei sukurti prieš klasės raktinį žodį klasės deklaracijoje.
Abstrakčioje klasėje gali būti abstraktavimo metodų (metodai be kūno), bet jų nėra, tačiau, jei klasė turi bent vieną abstrakcijos metodą, ji turi būti paskelbta abstrakčia. Tačiau neabstraktūs metodai taip pat gali būti naudojami tik abstrakčioje klasėje, bet tik norint įgyvendinti numatytąjį elgesį. Priklausomai nuo matomumo lygio, abstrakčios klasės metodai gali turėti prieigos modifikatorius, tokius kaip privatūs, vieši, statiniai ir apsaugoti. Abstrakčios klasės negalima pagreitinti ir ji neužtikrina šimtaprocentinės abstrakcijos dėl to, kad gali turėti konkretų metodą.
Nors sąsaja atrodo kaip klasė, tačiau ne. Kadangi „Java“ nepalaiko kelių paveldėjimų, sąsaja kartais yra ideali klasių hierarchijai pagrįsti. Sąsaja yra labiau klasės projektas, kuris taip pat naudojamas abstrakcijai pasiekti „Java“. Joje yra abstraktūs metodai ir statinės konstantos. Paprastai tariant, sąsaja yra abstrakčių metodų, naudojamų norint apibūdinti elgesį, kurį klasė turi įgyvendinti, rinkinys. Skirtingai nuo abstrakčios klasės, sąsaja teikia visišką „Java“ abstrakciją. Tai gali būti ir metodai, ir kintamieji, kaip ir klasė, tačiau sąsajoje deklaruoti metodai pagal nutylėjimą yra abstraktūs.
Anotacija | Sąsaja |
Abstraktus raktinis žodis naudojamas abstrakčiai klasei sukurti ir gali būti naudojamas su metodais. | Sąsajos raktinis žodis naudojamas sąsajai sukurti, tačiau jo negalima naudoti su metodais. |
Klasė gali pratęsti tik vieną abstrakčią klasę. | Klasė gali įgyvendinti daugiau nei vieną sąsają. |
Abstrakčioji klasė gali turėti ir abstrakčius, ir neabstraktus metodus. | Sąsaja gali turėti tik abstrakčius metodus. |
Kintamieji pagal nutylėjimą nėra galutiniai. Jame gali būti ne galutinių kintamųjų. | Kintamieji sąsajoje pagal nutylėjimą yra galutiniai. |
Abstrakti klasė gali pateikti sąsajos įgyvendinimą. | Sąsaja negali užtikrinti abstrakčios klasės įgyvendinimo. |
Tai gali turėti metodus su įgyvendinimu. | Jis teikia absoliučią abstrakciją ir negali būti įdiegtas metodas. |
Jis gali turėti viešus, privačius, statinius ir apsaugotus prieigos modifikatorius. | Metodai yra aiškiai vieši ir abstraktūs „Java“ sąsajoje. |
Tai nepalaiko kelių paveldėjimų. | Tai palaiko kelis palikimus. |
Tai idealiai tinka pakartotiniam kodo naudojimui ir evoliucijos perspektyvai. | Tai idealiai tinka tipo deklaracijai. |
Abstrakcijai naudojama abstrakti klasė ir sąsaja; tačiau jie turi nemažą skirtumų dalį. Pagrindinis skirtumas tarp šių dviejų elementų yra abstrakcijos metodai. Nors pirmoji gali turėti arba neturėti abstrakčių metodų, pastaroji yra netiesiogiai abstrakti. Abstrakčioji klasė gali turėti ir abstrakčius, ir neabstraktus metodus. Kita vertus, sąsaja gali turėti tik abstrakčius metodus, todėl jie negali būti įdiegti, o tai paprasčiausiai reiškia, kad sąsaja negali turėti abstrakčių metodų. Negalima įvykdyti abstrakčios klasės, kuri draudžia kurti objektą. Kita vertus, sąsaja gali atrodyti kaip klasė, bet taip nėra.