Elementer av Java-objektmodellen: abstrakt klasse, grensesnitt
Hovedideen til en abstrakt klasse ligger i følgende avhandling: Noen ganger er ikke ferdige klasser kreves, men i en "rå" form. Slike emner kan ikke brukes direkte (instantiated).
Hva er abstrakt klassen i Java?
Tenk på et annet eksempel. Det finnes en abstrakt kalenderklasse i Java i Java.util-pakken. Det implementerer ikke en bestemt kalender, som f.eks. Brukes i Vest- og Øst-Europa, Kina, Nord-Korea, Thailand, etc. Men det har mange nyttige funksjoner, for eksempel å legge til noen dager til en bestemt dato: disse funksjonene er nødvendige for alle kalenderimplementering. Du kan ikke opprette en forekomst fra en abstrakt klasse.
Abstrakte klasser, abstrakte Java-metoder
La oss si at du trenger å utvikle litt grafikkelementer, for eksempel geometriske former: en sirkel, et rektangel, en stjerne osv. Og det er en beholder som trekker dem. Hver komponent har et annet utseende, slik at den tilsvarende metoden (la den kalles maling) implementeres annerledes. Hver komponent har imidlertid mange vanlige trekk: tallene må være innskrevet i et rektangel, kan ha farge, være synlige og usynlige osv. Det vil si at du må opprette en overordnet klasse for alle disse tallene, hvor hver komponent vil arve vanlige egenskaper.
Hvis en klasse har abstrakte metoder, daklassen er abstrakt. Ordklassen er foran med søkeordet abstrakt, og i metoden header også. Etter overskriften til denne metoden må du sette et semikolon. I Java, kan en abstrakt klasse ikke gyte forekomster. Hvis vi ønsker å forby deres skapelse, selv om klassen ikke har abstrakte metoder, kan klassen bli erklært abstrakt. Men hvis en klasse har minst en abstrakt metode, må klassen være abstrakt. Det er umulig at klassen var både abstrakt og endelig, og metoden også. Metoden kan ikke være abstrakt, privat, statisk, innfødt. For at arvingklassene skal bli erklært ikke-abstrakte og instantiere dem, må de implementere alle abstrakte metoder for foreldrene. Selve klassen kan bruke sine abstrakte metoder.
eksempel:
- abstrakt klasse AClass {
- offentlig abstrakt tomrommetode (int a);
- }
- klasse BClass utvider AClass {
- offentlig tomrommetode (int a) {
- // kropp
- }
Variabler av abstrakt klassetype er tillatt. De kan referere til en ikke-abstrakt etterkommere av denne klassen eller være null.
Grensesnitt i Java - et alternativ til flere arv
I Java er det ikke flere arv, fordi det oppstår visse problemer. En klasse kan ikke arve fra flere klasser. Men da kan han implementere flere grensesnitt.
Grensesnitt og Java Abstrakt Klasser - Begreperliknende, men ikke identisk. Grensesnittet kan deklareres som offentlig, da det er tilgjengelig for alle, eller den offentlige modifikatoren kan utelates, så er grensesnittet kun tilgjengelig i pakken. Det abstrakte søkeordet er ikke nødvendig, siden grensesnittet allerede er abstrakt, men det kan spesifiseres.
Grensesnittdeklarasjon
Den starter med en overskrift og kan gå førstsøkeordet offentlig, deretter ordet grensesnitt. Da kan det være ordet strekker seg og enumerasjonen av grensesnittene fra hvilken den gitte er arvet. Her er ikke gjentagelser tillatt, og det er også umulig at arveforholdet danner en syklisk avhengighet. Deretter kommer grensesnitthuset, innelukket i bøyler. Følgende elementer er deklarert i grensesnittet: konstante felt og abstrakte metoder. Alle felt er offentlige endelige statiske - alle disse modifikatorene er valgfrie. Alle metoder betraktes som offentlig abstrakt - disse modifikatorene kan også spesifiseres. Nå er det nok sagt om forskjellen mellom den abstrakte klassen og Java-grensesnittet.
- offentlig grensesnitt AI strekker seg B, C, D {
- // kropp
- }
For å erklære en klasse som en grensesnittarver, må du bruke redskapsordet:
- klasse AClass implementerer BI, CI, DI {}
Det vil si at hvis et grensesnittnavn er spesifisert i klassedeklarasjonen etter redskaper, implementerer klassen den. Arvingene i denne klassen får sine elementer, slik at de også implementerer det.
Interface type variabler er også tillatt. De kan referere til typen av klassen som implementerer dette grensesnittet, eller null. Slike variabler har alle elementene i klasseobjektet, fordi objekter genereres fra klasser, og de er i sin tur arvet fra klasseobjektet.
I denne artikkelen så vi på noen av elementene i Java-objektmodellen - abstrakte klasser, abstrakte metoder og grensesnitt.