Ett viktigt begrepp i objektorienterad programmering är arv. Det ger ett sätt att objekt att definiera relationer med varandra. Som namnet antyder kan ett objekt ärva egenskaper från ett annat objekt.
Mer konkret kan ett objekt förmedla sitt tillstånd och beteenden till sina barn. För att arv ska fungera måste föremålen ha egenskaper som är gemensamma med varandra.
I Java, klasser kan tas från andra klasser, som kan tas från andra, och så vidare. Det beror på att de kan ärva funktioner från klassen ovanför, hela vägen upp till den översta objektklassen.
Ett exempel på Java-arv
Låt oss säga att vi skapar en klass som heter Human som representerar våra fysiska egenskaper. Det är en generisk klass som kan representera dig, mig eller vem som helst i världen. Dess tillstånd håller koll på saker som antalet ben, antal armar och blodtyp. Det har beteenden som att äta, sova och gå.
Människan är bra för att få en övergripande känsla av vad som gör oss alla lika men det kan till exempel inte berätta för mig om könsskillnader. För det måste vi göra två nya klasstyper som heter Man och kvinna. Tillståndet och beteendet hos dessa två klasser kommer att skilja sig från varandra på många sätt förutom de som de ärver från Human.
Därför gör arv oss att omfatta föräldraklassens tillstånd och beteenden i sitt barn. Barnklassen kan sedan utöka tillstånd och beteenden för att återspegla de skillnader som den representerar. Den viktigaste aspekten av detta koncept att komma ihåg är att barnklassen är en mer specialiserad version av föräldern.
Vad är en superklass?
I förhållandet mellan två objekt är en superklass det namn som ges till klassen som ärvs från. Det låter som en superduperklass, men kom ihåg att det är den mer generiska versionen. Bättre namn att använda kan vara basklass eller helt enkelt föräldraklass.
För att ta ett mer verkligt exempel den här gången kan vi ha en superklass som heter Person. Dess tillstånd har personens namn, adress, höjd och vikt, och har beteenden som att shoppa, göra sängen och titta på TV.
Vi kunde skapa två nya klasser som ärver från person som heter Student och arbetare. De är mer specialiserade versioner eftersom även om de har namn, adresser, titta på TV och shoppa har de också egenskaper som skiljer sig från varandra.
Arbetare kan ha ett tillstånd som har en anställningstitel och anställningsplats medan studenten kan ha information om ett studieområde och en lärosäten.
Exempel på superklass:
Föreställ dig att du definierar en personklass:
offentlig klass person. { }
En ny klass kan skapas genom att utöka denna klass:
offentlig klass anställd förlänger person. { }
Personklassen sägs vara anställdsklassens superklass.
Vad är en underklass?
I förhållandet mellan två objekt är en underklass det namn som ges till klassen som ärver från superklassen. Även om det låter lite tråkigt, kom ihåg att det är en mer specialiserad version av superklassen.
I föregående exempel är Student och Arbetare underklasserna.
Underklasser kan också kallas härledda klasser, barnklasser eller utökade klasser.
Hur många underklasser kan jag ha?
Du kan ha så många underklasser som du vill. Det finns ingen begränsning för hur många underklasser en superklass kan ha. På samma sätt finns det ingen begränsning i antalet arvnivåer. En hierarki av klasser kan byggas på ett visst gemensamt område.
Om du tittar på Java API-biblioteken ser du faktiskt många exempel på arv. Varje klass i API: erna från en klass som heter java.lang. Objekt. Till exempel när du använder ett JFrame-objekt är du i slutet av en lång arv:
java.lang. Objekt. utökat med java.awt. Komponent. utökat med java.awt. Behållare. utökat med java.awt. Fönster. utökat med java.awt. Ram. utökat med javax.swing. JFrame.
I Java, när en underklass ärver från en superklass, kallas det att "utöka" superklassen.
Kan min underklass ärva från många superklass?
Nej. I Java kan en underklass bara utvidga en superklass.
Varför använda arv?
Arv gör det möjligt för programmerare att återanvända kod de redan har skrivit. I exempel på mänsklig klass behöver vi inte skapa nya fält i klassen Man och kvinna för att hålla blodtypen eftersom vi kan använda den som ärvts från mänsklig klass.
En annan fördel med att använda arv är att det låter oss behandla en underklass som om det var en superklass. Låt oss till exempel säga att ett program har skapat flera instanser av man- och kvinnobjekten. Programmet kan behöva ringa sömnbeteendet för alla dessa objekt. Eftersom sömnbeteendet är ett beteende från mänsklig superklass, kan vi gruppera alla man- och kvinnobjekten och behandla dem som om de var mänskliga föremål.