Abstrakcijai Java tiek izmantotas abstraktās klases un saskarnes. Abstrakcija objektorientētā programmēšanā attiecas uz ieviešanas detaļu slēpšanu no gala lietotājiem.
Abstrakcijā jūs varat zināt, kādas ir funkcionalitātes, bet jūs nevarat zināt, kā tās tika ieviestas.
Apskatīsim katru no tiem un mēģināsim saprast, kāpēc tie tiek izmantoti.
Abstraktā klase
Klase, kuru nevar izveidot kā objektu un kurā var būt vai var nebūt abstraktas metodes, Java sauc par abstraktu klasi. Abstraktā metode ir metode, kurai nav ieviešanas struktūras, kad tā ir deklarēta.
Abstraktas klases GraphicObject piemērs – Oracle
Varat izveidot abstraktu klasi, pirms klases atslēgvārda norādot abstrakto atslēgvārdu.
abstract class abstractClass { void run() { System.out.println("ran"); } }
Abstrakto klasi var paplašināt ar citām klasēm. Citiem vārdiem sakot, to var arī iedalīt apakšklasē.
abstract class AbstractClass { void run() { System.out.println("ran"); } } class ExtendingAbstractClass extends AbstractClass { void newMethod() { System.out.println("new"); } @Override void run() { System.out.println("override"); } }
Abstraktās klases tiek izmantotas, lai ieviestu kopīgas metodes vairākās klasēs, kas paplašina noteiktu abstrakto klasi. Turklāt spēja definēt abstraktās metodes abstraktās klasēs padara tās neticami noderīgas klasēm, kurām ir līdzīgas metodes, bet ar atšķirīgu ieviešanu. Ņemsim piemēru.
Apsveriet automašīnu, kurai ir dažas funkcijas, piemēram, iedarbināšana, apturēšana, atpakaļgaita utt. Šīs funkcijas ir izplatītas visu veidu automašīnām.
Bet kā ar automatizācijas funkcijām, piemēram, pašbraukšanu? Šo funkciju ieviešana dažādiem automašīnu veidiem var atšķirties. Apskatīsim, kā jūs varat izveidot ar to saistītu objektorientētu programmu.
Pirmkārt, izveidojiet automašīnu klasi, kas tiks papildināta ar vairākām dažādu automašīnu tipu klasēm.
abstract class Car { void start() { // implementation System.out.println("runs car"); } void stop() { // implementation System.out.println("engine stops"); } void reverse() { // implementation System.out.println("reverse mode enabled"); } abstract void selfDrive(); }
Metode start(), stop() un reverse() ir metodes, kas ir izplatītas visās automašīnās. Tātad to ieviešana jau ir definēta pašā Car klasē. Tomēr noteikta veida automašīnām var būt dažādas pašbraukšanas režīma ieviešanas. Tādējādi jūs varat definēt selfDrive() kā abstraktu metodi un ieviest to dažādos veidos dažādās dažāda veida automašīnu klasēs.
class CarTypeA extends Car { @Override void start() { super.start(); } @Override void stop() { super.stop(); } @Override void reverse() { super.reverse(); } void selfDrive() { // custom implementation System.out.println("Type A self driving mode enabled"); } }
class CarTypeB extends Car { // ...all similar methods void selfDrive() { // custom implementation // different implementation than CarTypeB System.out.println("Type B self driving mode enabled"); } }
Ir svarīgi atzīmēt, ka, ja apakšklase neīsteno visas abstraktās metodes, kas definētas abstraktajā klasē, tā ir jādeklarē kā abstrakta klase.
Interfeiss
Interfeiss ir veids, kā norādīt klasei, kuras metodes tai jāīsteno. Piemēram, ja ņemat vērā automašīnas piemēru, tai ir dažas pamatfunkcijas. Tas var sākt, kustēties un apstāties. Šīs funkcijas ir izplatītas visās automašīnās.
Tātad, ja ieviešat automašīnas saskarni klasē, jums ir jāievieš visas metodes, lai automašīna darbotos pareizi un droši.
Līdzīgi kā abstraktās klasēs, mēs nevaram izveidot vai izveidot saskarnes objektus. To var uzskatīt par pilnībā abstraktu klasi, jo tajā ir tikai abstraktas metodes, ti, metodes bez ieviešanas korpusa.
Interfeisu var izveidot, izmantojot interfeisa atslēgvārdu.
interface CAR { void start(); void stop(); void move(); }
Ieviesiet saskarni, definējot klasi, izmantojot implements atslēgvārdu.
class CarTypeB implements CAR { public void start() { System.out.println("started"); } public void stop() { System.out.println("stopped"); } public void move() { System.out.println("running"); } }
Līdzība
Abstraktām klasēm un interfeisiem ir kopīga neviena instantiācija kā objekts.
Atšķirības
Abstraktās klases interfeisa mantošana un ieviešana Klase var mantot tikai vienu abstraktu klasi. Klase var ieviest vairākas saskarnes. Mainīgo veidiTam var būt galīgie, negalīgie, statiskie un nestatiskie mainīgie. Tam var būt tikai statiski un galīgie mainīgie. Metožu veidiTā var saturēt gan abstraktas, gan neabstraktas metodes.Tā var ietvert tikai abstraktas metodes, bet statiskās metodes ir izņēmums.Piekļuves modifikatori Abstraktai klasei var būt piekļuves modifikators.Safetē definētie metožu paraksti pēc noklusējuma ir publiski. Saskarnei nav piekļuves modifikatora.Konstruktori un iznīcinātājiTā var deklarēt konstruktorus un iznīcinātājus.Tā nevar deklarēt konstruktorus vai iznīcinātājus.SpeedFastSlowAtšķirības starp abstrakto klasi un saskarni
Kad izmantot abstrakto klasi un saskarni?
Izmantojiet abstraktās klases, ja:
- Jūs vēlaties koplietot dažas izplatītas metodes un laukus vairākās klasēs.
- Nestatisku un negalīgu lauku deklarēšana, lai mainītu objekta stāvokli, ar kuru tie ir saistīti.
Saskarnes var izmantot, ja:
- Jūs vēlaties definēt klases, kas ievieš saskarni, uzvedību, taču jūs neinteresē veids, kādā tā tiek ieviesta.
- Jūs vēlaties pārliecināties, vai klase ievieš visas metodes, lai tā darbotos pareizi.
Nobeiguma vārdi
Saskarnes galvenokārt tiek izmantotas, lai izveidotu API, jo tās var nodrošināt struktūru funkcionalitātes ieviešanai, neuztraucoties par faktisko ieviešanu.
Abstraktās klases parasti izmanto, lai koplietotu abstraktās un neabstraktās metodes starp vairākām klasēm, kas paplašina abstrakto klasi, lai padarītu kodu vairāk izmantojamu.
Uzziniet vairāk par Java, izmantojot šos tiešsaistes java kursus. Vai jūs gatavojaties intervijai par Java? Šeit ir daži intervijas jautājumi par objektorientēto programmēšanu.