Dědičnost je jedním ze základních konceptů objektově orientovaného programování. V programování slovo dědičnost představuje vztah, ve kterém podřízená třída předpokládá stav a chování nadřazené třídy.

Účelem dědictví ve vývoji softwaru je usnadnit opětovné použití bezpečného a spolehlivého softwaru. Jednou z hlavních výhod používání dědičnosti je, že eliminuje nadbytečný kód ve vašich programech.

Jak funguje dědičnost

Myšlenkou dědičnosti je, že mnoho tříd nebo objektů má některé ze stejné sady atributů a metod. Proto v duchu výroby spolehlivého softwaru mohou nové třídy nyní čerpat z již existujících souvisejících tříd a v případě potřeby rozšířit stávající stavy a chování.

Skutečným příkladem toho, jak funguje dědictví, by bylo zvážit ovoce. Jedná se o široký štítek, který slouží k zapouzdření řady různých položek.

Jablko je ovoce a také pomeranč. Pomeranč však není jablko, takže pokud vlastníte obchod, neměli byste ovoce jako jednu ze skladových položek. Možná byste ve svém inventáři mohli mít sekci s ovocem a v této sekci byste měli konkrétnější položky, jako jsou jablka a pomeranče.

Tak funguje dědičnost.

Používání dědičnosti v Javě

Dědičnost lze použít v jakémkoli programovacím jazyce, který používá objektově orientované paradigma programování. Přesný způsob, jakým se dědičnost používá, však závisí na konkrétním programovacím jazyce.

Například, C ++ je také objektově orientovaný programovací jazyk. C ++ podporuje tzv. Vícenásobnou dědičnost, zatímco Java podporuje pouze jednu dědičnost.

To znamená, že v Javě může mít nadřazená třída mnoho podřízených tříd, ale každá podřízená třída může mít pouze jednu nadřazenou třídu (jedna dědičnost). Existuje však způsob, jak dosáhnout nepřímé vícenásobné dědičnosti v Javě, vytvořením vztahu prarodiče, rodiče a dítěte.

Vytvoření rodičovské třídy v Javě

Proces výběru nadřazené třídy z dokumentu softwarových požadavků je známý jako objektově orientovaná analýza. Během tohoto procesu se fráze „je“ často používá k identifikaci možných dědičných vztahů. Na základě výše uvedeného příkladu byste měli vidět, že ovoce bude naší mateřskou třídou.

Příklad třídy rodiče s ovocem


veřejná třída Fruit {
// Proměnná deklarace
chráněné semeno struny;
chráněná String skinColor;
chráněná strunová chuť;
// Výchozí konstruktor
public Fruit () {
seed = "";
skinColor = "";
chuť = "";
}
// Primární konstruktor
veřejné ovoce (String seed, String skinColor, String taste) {
this.seed = seed;
this.skinColor = skinColor;
this.taste = chuť;
}
// getry a setry
public String getSeed () {
vrátit semeno;
}
public void setSeed (String seed) {
this.seed = seed;
}
public String getSkinColor () {
vrátit skinColor;
}
public void setSkinColor (String skinColor) {
this.skinColor = skinColor;
}
public String getTaste () {
vrátit chuť;
}
public void setTaste (chuť řetězce) {
this.taste = chuť;
}
// metoda jíst
public void eat () {
// obecný kód, jak jíst ovoce
}
// metoda šťávy
public void juice () {
// obecný kód, jak odšťavnit ovoce
}
}

Jedním z nejpozoruhodnějších aspektů nadřazené třídy výše je modifikátor přístupu, který se používá s každou deklarací proměnné. „Chráněný“ modifikátor přístupu je ideální pro použití v nadřazených třídách, protože brání podřízeným třídám v získání přístupu k datovým atributům nadřazené třídy.

Dále v kódu se seznámíte s konstruktory, getry a settery, které jsou obecnými stavebními kameny pro jakoukoli třídu Java. Nakonec se seznámíte se dvěma metodami (džus a jídlo), které jsou vytvořeny v rodičovské třídě našeho programu, protože jsou univerzální pro všechny druhy ovoce - všechny druhy ovoce lze konzumovat a odšťavňovat.

Vytváření podřízených tříd v Javě

Podřízené třídy se obvykle nazývají specializované nebo odvozené třídy, protože dědí stav a chování od rodiče a často přizpůsobují tyto atributy tak, aby byly konkrétnější.

Pokračováním našeho příkladu byste měli vidět, proč by oranžová byla vhodnou podřízenou třídou výše uvedené třídy ovoce.

Příklad oranžové dětské třídy


veřejná třída Orange rozšiřuje ovoce {
// deklarace proměnné
soukromé int supremes;
// výchozí konstruktor
public Orange () {
supremes = 0;
}
// primární konstruktor
public Orange (String seed, String skinColor, String taste, int supremes) {
super (semeno, skinColor, chuť);
this.supremes = supremes;
}
// getry a setry
public int getsupremes () {
návratové nadvlády;
}
public void setsupremes (int supremes) {
this.supremes = supremes;
}
// metoda jíst
public void eat () {
// jak jíst pomeranč
}
// metoda šťávy
public void juice () {
// jak šťáva a pomeranč
}
// metoda odlupování
public void peel () {
// jak oloupat pomeranč
}
}

Existuje rozdíl mezi tím, jak vypadá normální deklarace třídy Java, a tím, co máme v našem kódu výše. Klíčové slovo „extends“ je to, co se v Javě používá k umožnění dědičnosti.

V našem příkladu výše třída dítěte (oranžová) rozšiřuje třídu rodiče (ovoce). Proto nyní může být stav a chování třídy ovoce zpřístupněno a upraveno oranžovou třídou.

Jedinečný atribut, který má naše oranžová třída, je identifikován pomocí názvu proměnné supremes (což je oficiální název pro malé segmenty nalezené v pomerančích). Zde vstupuje do hry specializace; ne všechny plody mají supremes, ale všechny pomeranče ano, takže rezervovat proměnnou supremes pro oranžovou třídu je logické.

Přidání metody „slupky“ k již existujícím metodám „jíst“ a „džus“ je také logické, protože i když ne všechno ovoce lze loupat, pomeranče se často loupají.

Měli byste mít na paměti, že pokud bychom neměli v úmyslu změnit stávající metody „jíst“ a „džus“, nemuseli bychom je zahrnout do naší oranžové třídy. Metody v oranžové třídě přepíší jakoukoli podobnou metodu v ovocné třídě. Pokud by se tedy všechno ovoce konzumovalo a odšťavňovalo stejným způsobem, nemuseli bychom tyto metody vytvářet v oranžové třídě.

Konstruktory rolí hrají v dědičnosti

Ve výchozím nastavení jsou konstruktory nadřazené třídy zděděny podřízenými třídami. Pokud je tedy vytvořen objekt podřízené třídy, znamená to, že je automaticky vytvořen také objekt nadřazené třídy.

Vraťme se k našemu příkladu, pokaždé, když je vytvořen nový oranžový objekt, je vytvořen také ovocný objekt, protože oranžová je ovoce.

V zákulisí, když je vytvořen objekt podřízené třídy, je nejprve volán konstruktor nadřazené třídy a poté konstruktor podřízené třídy. V naší oranžové podřízené třídě výše, pokud je oranžový objekt vytvořen bez jakýchkoli parametrů, bude volán náš výchozí konstruktor třídy ovoce, následovaný naším výchozím dodavatelem oranžové třídy.

„Super“ metoda v našem primárním konstruktoru výše je nutná, protože určuje, že primární konstruktor - a ne výchozí konstruktor - nadřazené třídy ovoce by měl být volán, kdykoli je oranžový objekt s parametry vytvořeno.

Nyní můžete použít dědičnost v Javě

Z tohoto článku jste se mohli naučit, co je dědičnost, jak to funguje a proč je to tak důležitý koncept v programování. Nyní můžete vytvořit své dědické vztahy pomocí programovacího jazyka Java. Kromě toho nyní víte, jak obejít jedno pravidlo dědičnosti Javy vytvořením vztahu prarodičů.

Uznání obrázku: Andreas Wohlfahrt /Pexels

E-mailem
Jak uspořádat váš objektově orientovaný kód s dědičností

Správné objektově orientované programování znamená, že potřebujete vědět o dědičnosti a o tom, jak může zjednodušit kódování a snížit počet chyb.

Přečtěte si další

Související témata
  • Programování
  • Jáva
  • Objektově orientované programování
O autorovi
Kadeisha Kean (3 publikované články)

Kadeisha Kean je vývojář softwaru a technický / technologický autor. Má výraznou schopnost zjednodušit některé z nejsložitějších technologických konceptů; výroba materiálu, kterému snadno porozumí každý technologický nováček. Vášnivě se věnuje psaní, vývoji zajímavého softwaru a cestování po světě (prostřednictvím dokumentů).

Více od Kadeisha Kean

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji s technickými tipy, recenzemi, bezplatnými elektronickými knihami a exkluzivními nabídkami!

Ještě jeden krok…!

V e-mailu, který jsme vám právě poslali, potvrďte svou e-mailovou adresu.

.