Element av Java-objektmodellen: abstrakt klass, gränssnitt
Den abstrakta klassens huvudidé ligger i följande avhandling: ibland krävs inte färdiga klasser, men i en "rå" form. Sådana ämnen kan inte användas direkt (skapa instanser).
Vad är abstrakt klass i Java?
Låt oss överväga ett annat exempel. Det finns i Java en abstrakt kalenderklass i Java.util-paketet. Det implementerar inte en specifik kalender som används till exempel i västra och östra Europa, Kina, Nordkorea, Thailand etc. Men det har många användbara funktioner, till exempel, lägga till några dagar till ett visst datum: dessa funktioner krävs för alla genomförande av kalendern. Du kan inte kasta en instans från en abstrakt klass.
Abstrakta klasser, Java abstrakta metoder
Låt oss säga att du behöver utveckla flera grafiska bilderelement, till exempel geometriska figurer: en cirkel, en rektangel, en stjärna, etc. Och det finns en behållare som drar dem. Varje komponent har ett annat utseende, så den motsvarande metoden (låt den kallas färg) implementeras annorlunda. Dock har varje komponent många likheter: .. Siffran bör ingå i lådan kan ha en färg för att vara synliga och osynliga, etc. Med andra ord, måste du skapa en förälder klass för alla dessa figurer, där varje komponent kommer att ärva de allmänna egenskaperna.
Om en klass har abstrakta metoder, dåklassen är abstrakt. Innan ordklassen läggs nyckelordet abstrakt, i metodens rubrik - också. Efter huvudet på denna metod måste du lägga en semikolon. I Java kan en abstrakt klass inte hysa instanser. Om vi vill förbjuda deras skapande, även om klassen inte har abstrakta metoder, kan klassen förklaras abstrakt. Men om en klass har minst en abstrakt metod, måste klassen vara abstrakt. Det är omöjligt för klassen att vara abstrakt, slutlig och metod också. Metoden kan inte vara abstrakt, privat, statisk, infödd. För att arvklasserna ska kunna förklaras icke abstrakta och skapa sina instanser, måste de genomföra alla föräldrarnas abstrakta metoder. Klassen själv kan använda sina abstrakta metoder.
exempel:
- abstrakt klass AClass {
- offentlig abstrakt tomgångsmetod (int a);
- }
- klass BClass utökar AC class {
- offentlig tomgångsmetod (int a) {
- // kropp
- }
Variabler av abstrakt klasstyp är tillåtna. De kan referera till den icke-abstrakta efterföljaren av denna klass eller vara null.
Gränssnitt i Java - ett alternativ till flera arv
Java har inte flera arv, för då finns det vissa problem. En klass kan inte ärva från flera klasser. Men det kan genomföra flera gränssnitt.
Java-gränssnitt och abstrakta klasserliknande men inte identiska. Gränssnittet kan deklareras som offentligt, då det är tillgängligt för alla, eller du kan inte ange modifieringsmedlet, då är gränssnittet endast tillgängligt i paketet. Det abstrakta sökordet är inte nödvändigt, eftersom gränssnittet redan är abstrakt, men du kan ange det.
Gränssnittsdeklaration
Det börjar med en rubrik och kan gå förstsökordet offentligt, då ordet gränssnitt. Då kan ordet sträcker sig och uppräkningen av gränssnittet från vilka detta är ärvt. Det finns inga upprepningar tillåtna, och det är också omöjligt för arvsläget att vara cykliskt. Sedan kommer gränssnittskroppen, omsluten i hängslen. Elementfält förklaras i gränssnittskroppen: konstanta fält och abstrakta metoder. Alla fält är offentliga slutliga statiska - alla dessa modifierare är frivilliga. Alla metoder anses vara offentliga abstrakta - dessa modifierare kan också specificeras. Nu räcker det nog med att säga om skillnaden i den abstrakta klassen från Java-gränssnittet.
- offentligt gränssnitt AI utökar B, C, D {
- // kropp
- }
För att deklarera en klass som arvingen till gränssnittet måste du använda nyckelordets implementeringar:
- klass AClass implementerar BI, CI, DI {}
Det vill säga om gränssnittets namn anges i klassdeklarationen efter redskap, så implementerar klassen det. Arvingarna i denna klass ärver sina element, så de genomför det också.
Variabler av gränssnittstypen är också tillåtna. De kan referera till vilken typ av klass som implementerar detta gränssnitt, eller noll. Sådana variabler har alla element i Objeklassen, eftersom objekt genereras från klasser, och de är i sin tur ärvda från Objeklassen.
I den här artikeln tittade vi på några element i Java-objektmodellen - abstrakta klasser, abstrakta metoder, gränssnitt.