W tym samouczku nauczymy się dziedziczenia Java i jego typów na przykładzie.
Dziedziczenie jest jedną z kluczowych cech OOP, która pozwala nam stworzyć nową klasę z istniejącej klasy.
Nowa klasa, która jest tworzona, jest znana jako podklasa ( klasa potomna lub pochodna), a istniejąca klasa, z której pochodzi klasa potomna, jest nazywana nadklasą ( klasa nadrzędna lub podstawowa).
To extends
słowo kluczowe służy do dziedziczenia w Javie. Na przykład,
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 )
W powyższym przykładzie klasa Dog jest tworzona poprzez dziedziczenie metod i pól z klasy Animal.
Tutaj Dog jest podklasą, a Animal jest nadklasą.
Przykład 1: Dziedziczenie języka 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(); ) )
Wynik
Mam na imię Rohu, mogę zjeść
W powyższym przykładzie wyprowadziliśmy podklasę Dog z nadklasy Animal. Zwróć uwagę na oświadczenia,
labrador.name = "Rohu"; labrador.eat();
Tutaj labrador jest przedmiotem psa. Jednak nazwij i eat()
są członkami klasy Animal.
Ponieważ Dog dziedziczy pole i metodę po Animal, jesteśmy w stanie uzyskać dostęp do pola i metody za pomocą obiektu Dog.

jest-związkiem
W Javie, dziedziczenie to jest-a związek. To znaczy, używamy dziedziczenia tylko wtedy, gdy istnieje relacja is-a między dwiema klasami. Na przykład,
- Samochód to pojazd
- Pomarańcza to owoc
- Chirurg to lekarz
- Pies to zwierzę
W tym przypadku samochód może dziedziczyć po pojeździe , pomarańczowy po owocu i tak dalej.
Nadpisywanie metod w dziedziczeniu Java
W przykładzie 1 widzimy, że obiekt podklasy może uzyskać dostęp do metody nadklasy.
Jeśli jednak ta sama metoda występuje zarówno w nadklasie, jak i podklasie, co się stanie?
W takim przypadku metoda z podklasy przesłania metodę z nadklasy. Ta koncepcja jest znana jako przesłanianie metody w Javie.
Przykład 2: Przesłanianie metod w dziedziczeniu Java
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(); ) )
Wynik
Jem karmę dla psów, którą mogę szczekać
W powyższym przykładzie eat()
metoda jest obecna zarówno w nadklasie Animal, jak i podklasie Dog.
Tutaj stworzyliśmy obiekt labrador Dog.
Teraz, gdy wywołujemy eat()
przy użyciu obiektu labrador, wywoływana jest metoda wewnątrz Dog. Dzieje się tak, ponieważ metoda wewnątrz klasy pochodnej przesłania metodę wewnątrz klasy bazowej.
Nazywa się to przesłanianiem metody. Aby dowiedzieć się więcej, odwiedź stronę Zastępowanie metod Java.
Uwaga : użyliśmy @Override
adnotacji, aby powiedzieć kompilatorowi, że zastępujemy metodę. Jednak adnotacja nie jest obowiązkowa. Aby dowiedzieć się więcej, odwiedź Adnotacje Java.
super słowo kluczowe w dziedziczeniu Java
Wcześniej widzieliśmy, że ta sama metoda w podklasie przesłania metodę w nadklasie.
W takiej sytuacji super
słowo kluczowe służy do wywołania metody klasy nadrzędnej z metody klasy potomnej.
Przykład 3: super słowo kluczowe w dziedziczeniu
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(); ) )
Wynik
Mogę jeść, jem karmę dla psów, potrafię szczekać
W powyższym przykładzie eat()
metoda jest obecna zarówno w klasie bazowej Animal, jak i klasie pochodnej Dog. Zwróć uwagę na oświadczenie,
super.eat();
Tutaj super
słowo kluczowe jest używane do wywołania eat()
metody obecnej w nadklasie.
Możemy również użyć super
słowa kluczowego, aby wywołać konstruktor nadklasy z konstruktora podklasy. Aby dowiedzieć się więcej, odwiedź stronę słowa kluczowego super Java .
chronionych członków w dziedziczeniu
W Javie, jeśli klasa zawiera protected
pola i metody, wówczas te pola i metody są dostępne z podklasy tej klasy.
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
W przypadku dziedziczenia pojedynczego pojedyncza podklasa rozciąga się z pojedynczej nadklasy. Na przykład,

2. Dziedziczenie wielopoziomowe
W przypadku dziedziczenia wielopoziomowego podklasa rozciąga się z nadklasy, a następnie ta sama podklasa działa jako nadklasa dla innej klasy. Na przykład,

3. Dziedziczenie hierarchiczne
W dziedziczeniu hierarchicznym wiele podklas pochodzi z jednej nadklasy. Na przykład,

4. Dziedziczenie wielokrotne
W przypadku dziedziczenia wielokrotnego pojedyncza podklasa pochodzi z wielu nadklas. Na przykład,

Uwaga : Java nie obsługuje dziedziczenia wielokrotnego. Jednak za pomocą interfejsów możemy osiągnąć wielokrotne dziedziczenie. Aby dowiedzieć się więcej, odwiedź stronę Java implementuje wielokrotne dziedziczenie.
5. Dziedziczenie hybrydowe
Dziedziczenie hybrydowe to połączenie dwóch lub więcej typów dziedziczenia. Na przykład,

Tutaj połączyliśmy dziedziczenie hierarchiczne i wielokrotne, aby utworzyć dziedziczenie hybrydowe.