Hovedidéen om en abstrakt klasse er indeholdt i følgende afhandling: nogle gange kræves der ikke færdige klasser, men i en "rå" form. Sådanne forudindstillinger kan ikke bruges direkte (instantieret).
Hvad er en abstrakt klasse i Java
Lad os se på et andet eksempel. Der er en abstrakt klassekalender i Java i pakken Java.util. Den implementerer ikke en bestemt kalender, der bruges for eksempel i Vest- og Østeuropa, Kina, Nordkorea, Thailand osv. Men den har mange nyttige funktioner, for eksempel at tilføje flere dage til en bestemt dato: disse funktioner er nødvendige for enhver kalenderimplementering. Du kan ikke gyde en forekomst fra en abstrakt klasse.
Abstrakte klasser, abstrakte Java-metoder
Lad os sige, at du skal udvikle flere grafikelementer, for eksempel geometriske former: cirkel, rektangel, stjerne osv. Og der er en beholder, der tegner dem. Hver komponent har et andet udseende, så den tilsvarende metode (lad os kalde det maling) implementeres forskelligt. Hver komponent har dog mange ting til fælles: figurerne skal være indskrevet i et rektangel, de kan have en farve, være synlige og usynlige osv. Det vil sige, du skal oprette en overordnet klasse til alle disse figurer, hvor hver komponent arver fælles egenskaber.
Hvis klassen har abstrakte metoder, såklassen er abstrakt. Nøgleordet abstrakt placeres foran klasseordet og i metodens overskrift også. Et semikolon skal placeres efter titlen på en sådan metode. I Java kan en abstrakt klasse ikke oprette forekomster. Hvis vi vil forbyde deres oprettelse, selvom klassen ikke har nogen abstrakte metoder, så kan klassen erklæres abstrakt. Men hvis klassen har mindst en abstrakt metode, skal klassen være abstrakt. Det er umuligt for en klasse at være abstrakt og endelig og også en metode. Metoden kan ikke være abstrakt, privat, statisk, indfødt. For at nedarvede klasser kan erklæres ikke-abstrakte og instantierede, skal de implementere alle de abstrakte metoder for forældrene. Klassen selv kan bruge sine abstrakte metoder.
eksempel:
- abstrakt klasse AC-klasse {
- offentlig abstrakt ugyldig metode (int a);
- }
- klasse BClass udvider AClass {
- offentlig ugyldighedsmetode (int a) {
- // krop
- }
Variabler af typen abstrakt klasse er tilladt. De kan henvise til en ikke-abstrakt efterkommer af denne klasse eller være nul.
Java-grænseflader - et alternativ til flere arv
Der er ingen flere arv i Java, for så opstår der visse problemer. En klasse kan ikke arve fra flere klasser. Men det kan implementere flere grænseflader.
Java-grænseflader og abstrakte klasser - koncepterlignende, men ikke det samme. Grænsefladen kan erklæres offentlig, så er den tilgængelig for alle, eller du kan udelade den offentlige modifikator, så er grænsefladen kun tilgængelig inden i sin pakke. Det abstrakte nøgleord er ikke påkrævet, fordi grænsefladen allerede er abstrakt, men du kan angive det.
Interface-erklæring
Det starter med en titel og går muligvis førstdet offentlige nøgleord efterfulgt af grænsefladeordet. Derefter strækker ordet sig, og der kan komme en opregning af de grænseflader, hvorfra den givne arves. Gentagelser er ikke tilladt her, og det er også umuligt for et arveforhold at danne et cirkulært forhold. Derefter kommer interfacekroppen, lukket i krøllede seler. Elementerne erklæres i grænsefladen: konstante felter og abstrakte metoder. Alle felter er offentlige endelige statiske - alle disse modifikatorer er valgfri. Alle metoder betragtes som offentlige abstrakte - disse modifikatorer kan også specificeres. Nu er der blevet sagt nok om forskellen mellem en abstrakt klasse og en Java-grænseflade.
- offentlig grænseflade AI udvider B, C, D {
- // krop
- }
For at erklære en klasse for at arve en grænseflade skal du bruge implementeringsnøgleordet:
- klasse AC-klasse implementerer BI, CI, DI {}
Det vil sige, hvis et interface-navn er angivet efter implementeringer i en klassedeklaration, implementerer klassen det. Arvingerne i denne klasse arver dens elementer, så de implementerer det også.
Interface variabler er også tilladt. De kan henvise til den type klasse, der implementerer denne grænseflade, eller null. Sådanne variabler har alle elementerne i objektklassen, fordi objekter er afledt af klasser, og de arves igen fra objektklassen.
I denne artikel kiggede vi på nogle af elementerne i Java-objektmodellen - abstrakte klasser, abstrakte metoder, grænseflader.