V tomto tutoriálu se pomocí příkladu dozvíme o dědičnosti Java a jejích typech.
Dědičnost je jednou z klíčových funkcí OOP, která nám umožňuje vytvořit novou třídu ze stávající třídy.
Nová třída, která je vytvořena, je známá jako podtřída (podřízená nebo odvozená třída) a stávající třída, ze které je odvozena podřízená třída, je známá jako nadtřída (nadřazená nebo základní třída).
extends
Klíčové slovo se používá k provádění dědičnost v Javě. Například,
class Animal ( // methods and fields ) // use of extends keyword // to perform inheritance class Dog extends Animal ( // methods and fields of Animal // methods and fields of Dog )
Ve výše uvedeném příkladu je třída Dog vytvořena zděděním metod a polí ze třídy Animal.
Zde je podtřída pes a nadtřída zvíře.
Příklad 1: Dědičnost Java
class Animal ( // field and method of the parent class String name; public void eat() ( System.out.println("I can eat"); ) ) // inherit from Animal class Dog extends Animal ( // new method in subclass public void display() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access field of superclass labrador.name = "Rohu"; labrador.display(); // call method of superclass // using object of subclass labrador.eat(); ) )
Výstup
Jmenuji se Rohu, mohu jíst
Ve výše uvedeném příkladu jsme odvodili podtřídu Dog od nadtřídy Animal. Všimněte si prohlášení,
labrador.name = "Rohu"; labrador.eat();
Zde je labrador předmětem psa. Jmenujte se a eat()
jsou však členy třídy Animal.
Jelikož Pes zdědí pole a metodu od zvířete, jsme schopni získat přístup k poli a metodě pomocí objektu Psa.

je-vztah
V Javě je dědičnost vztahem is-a . To znamená, že dědičnost používáme pouze v případě, že existuje vztah mezi dvěma třídami. Například,
- Auto je vozidlo
- Oranžová je ovoce
- Chirurg je lékař
- Pes je zvíře
Zde může auto zdědit z vozidla , Orange může zdědit z ovoce atd.
Přepsání metody v dědičnosti Java
V příkladu 1 vidíme, že objekt podtřídy může přistupovat k metodě nadtřídy.
Pokud je však stejná metoda přítomna v nadtřídě i podtřídě, co se stane?
V tomto případě metoda v podtřídě přepíše metodu v nadtřídě. Tento koncept se v Javě označuje jako metoda přepsání.
Příklad 2: Přepsání metody v Java Inheritance
class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )
Výstup
Jím krmivo pro psy, mohu štěkat
Ve výše uvedeném příkladu je eat()
metoda přítomna jak v nadtřídě Animal, tak v podtřídě Dog.
Zde jsme vytvořili objekt labradora psa.
Nyní, když voláme eat()
pomocí objektu labrador, je volána metoda uvnitř Dog. Důvodem je, že metoda uvnitř odvozené třídy přepíše metodu uvnitř základní třídy.
Tomu se říká přepsání metody. Chcete-li se dozvědět více, navštivte Java Method Overriding.
Poznámka : Použili jsme @Override
anotaci, abychom kompilátoru řekli, že přepisujeme metodu. Anotace však není povinná. Další informace najdete v anotacích Java.
super klíčové slovo v dědičnosti Java
Dříve jsme viděli, že stejná metoda v podtřídě přepíše metodu v nadtřídě.
V takové situaci se super
klíčové slovo používá k volání metody nadřazené třídy z metody podřízené třídy.
Příklad 3: super klíčové slovo v dědičnosti
class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( // call method of superclass super.eat(); System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )
Výstup
Můžu jíst Jím psí jídlo, mohu štěkat
Ve výše uvedeném příkladu je eat()
metoda přítomna jak v základní třídě Animal, tak v odvozené třídě Dog. Všimněte si prohlášení,
super.eat();
Zde se super
klíčové slovo používá k volání eat()
metody přítomné v nadtřídě.
super
Klíčové slovo můžeme také použít k volání konstruktoru nadtřídy z konstruktoru podtřídy. Chcete-li se dozvědět více, navštivte super klíčové slovo Java .
chránění členové v dědictví
Pokud v Javě třída zahrnuje protected
pole a metody, jsou tato pole a metody přístupné z podtřídy třídy.
Example 4: protected Members in Inheritance
class Animal ( protected String name; protected void display() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void getInfo() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access protected field and method // using the object of subclass labrador.name = "Rocky"; labrador.display(); labrador.getInfo(); ) )
Output
I am an animal. My name is Rocky
In the above example, we have created a class named Animal. The class includes a protected field: name and a method: display()
.
We have inherited the Dog class inherits Animal. Notice the statement,
labrador.name = "Rocky"; labrador.display();
Here, we are able to access the protected field and method of the superclass using the labrador object of the subclass.
Why use inheritance?
- The most important use of inheritance in Java is code reusability. The code that is present in the parent class can be directly used by the child class.
- Method overriding is also known as runtime polymorphism. Hence, we can achieve Polymorphism in Java with the help of inheritance.
Types of inheritance
There are five types of inheritance.
1. Single Inheritance
V jediné dědičnosti vychází jedna podtřída z jedné nadtřídy. Například,

2. Víceúrovňová dědičnost
Ve víceúrovňové dědičnosti podtřída vychází z nadtřídy a potom stejná podtřída funguje jako nadtřída pro jinou třídu. Například,

3. Hierarchická dědičnost
V hierarchické dědičnosti vychází více podtříd z jedné nadtřídy. Například,

4. Vícenásobné dědictví
Ve vícenásobné dědičnosti vychází jedna podtřída z více nadtříd. Například,

Poznámka : Java nepodporuje vícenásobné dědění. Můžeme však dosáhnout více dědičnosti pomocí rozhraní. Chcete-li se dozvědět více, navštivte stránku Java implementuje více dědičností.
5. Hybridní dědičnost
Hybridní dědičnost je kombinací dvou nebo více typů dědičnosti. Například,

Zde jsme kombinovali hierarchickou a vícenásobnou dědičnost, abychom vytvořili hybridní dědičnost.