Dziedziczenie Java (z przykładami)

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 extendssł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.

Implementacja dziedziczenia Java

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 @Overrideadnotacji, 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 supersł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 supersłowo kluczowe jest używane do wywołania eat()metody obecnej w nadklasie.

Możemy również użyć supersł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 protectedpola 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,

Pojedyncze dziedziczenie w języku Java

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,

Dziedziczenie wielopoziomowe Java

3. Dziedziczenie hierarchiczne

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

Dziedziczenie hierarchiczne Java

4. Dziedziczenie wielokrotne

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

Dziedziczenie wielokrotne w języku Java

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,

Dziedziczenie hybrydowe języka Java

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

Interesujące artykuły...