what is inheritance java tutorial with examples
W tym samouczku wyjaśniono koncepcję dziedziczenia w Javie, powiązane terminy, takie jak słowa kluczowe „extends” i „super”, podklasa, nadklasa, relacje Is-A, HAS-A itp .:
Po zapoznaniu się z trzema filarami OOP, a mianowicie abstrakcją, enkapsulacją i polimorfizmem w Javie, dochodzimy do ostatniego filaru OOP, czyli dziedziczenia.
Zaczynając od tego samouczka, w kilku następnych samouczkach omówimy dziedziczenie w Javie.
=> Przeczytaj serię szkoleń Easy Java.
Czego się nauczysz:
Dziedziczenie w Javie
Dziedziczenie w Javie można zdefiniować jako technikę lub proces, w którym jeden obiekt klasy uzyskuje zachowanie i właściwości innego obiektu. Odbywa się to poprzez dziedziczenie klasy lub ustanowienie relacji między dwiema klasami.
Na przykład, Żaba to płaz. Podobnie jak inne zwierzęta z klasy płazów, żaba może mieć wiele cech wspólnych dla innych zwierząt. Więc tutaj płaz jest gatunkiem, a jego członkami są zwierzęta takie jak żaby.
Jeśli będziemy musieli przedstawić gatunek płazów i jego członków w reprezentacji programowej wykorzystującej OOP, to co zrobimy, to stworzymy klasę „Płazy” zawierającą właściwości lub zachowanie typowe dla ogólnie rzecz biorąc płazów.
W ten sposób nie musimy powielać wspólnych właściwości i zachowania każdego opisywanego przez nas zwierzęcia płazów. Bezpośrednio utworzymy klasę dla płazów i dziedziczy z klasy płazów, jak pokazano poniżej.
Tak więc ogólna idea funkcji „Dziedziczenie” polega na tym, że możemy tworzyć nowe klasy poprzez dziedziczenie z już istniejących klas. Dziedzicząc z już istniejących klas, możemy wykorzystać właściwości i zachowanie tych klas. Poza tym możemy dodać więcej właściwości i / lub zachowania w naszej nowej klasie.
Funkcja dziedziczenia przedstawia „ rodzic-dziecko ”Połączenie lub relacja w języku Java. Klasa, z której dziedziczona jest nowa klasa, nosi nazwę „ Klasa nadrzędna ”, Podczas gdy nowa klasa nosi nazwę„ Klasa dziecka ”.
Dziedziczenie jest używane głównie:
- Dla przesłanianie metody abyśmy mogli osiągnąć polimorfizm w czasie wykonywania .
- Do ponownie wykorzystaj kod . Dziedzicząc z już istniejących klas, zapewniamy rozszerzenie wielokrotnego użytku kodu.
Powszechna terminologia stosowana w dziedziczeniu
- Możliwość ponownego użycia: Mechanizm, za pomocą którego nowe klasy ponownie wykorzystują pola lub właściwości i metody istniejącej klasy.
- Klasa: Klasa to zbiór obiektów, które mają wspólne właściwości. Klasa może być postrzegana jako szablon lub plan dla obiektów.
- Podklasa / klasa podrzędna: Klasa dziedzicząca z innej klasy jest podklasą, klasą podrzędną lub klasą pochodną.
- Super klasa / klasa dla rodziców: Klasa, która jest dziedziczona przez inną klasę w celu uzyskania właściwości i metod, nazywana jest klasą nadrzędną, nadklasą lub klasą bazową.
Poniższa hierarchia dziedziczenia jest przykładem pokazującym nadklasę i podklasę.
Mamy klasę Employee z polami OrganisationName i EmployeeId. Może również zawierać inne pola, takie jak imię i nazwisko pracownika, dział i inne dane pracownika.
Następnie wyprowadzamy inną klasę o nazwie „SoftwareDeveloper” z wynagrodzeniem i dodatkami w tej dziedzinie. Klasa SoftwareDeveloper dziedziczy po klasie Employee, a tym samym nabywa również właściwości klasy Employee.
Jak pokazano na powyższym diagramie, tutaj klasa Employee jest klasą Super lub Base, a SoftwareDeveloper jest podklasą lub klasą pochodną.
„Rozszerza” słowo kluczowe w języku Java
W Javie słowo kluczowe „extends” jest używane do dziedziczenia klasy.
Ogólna składnia dziedziczenia Java jest podana poniżej:
class SubClass extends SuperClass { //subclass methods and fields }
Jak pokazano powyżej, słowo kluczowe „extends” występuje po nazwie klasy w składni deklaracji klasy.
Słowo kluczowe „extends” oznacza, że tworzymy nową klasę „SubClass”, która odziedziczy właściwości i zachowanie po „SuperClass”. Innymi słowy, słowo kluczowe extends wskazuje, że budujemy nową klasę SubClass na istniejącej funkcjonalności SuperClass.
Dziedziczenie zaimplementowane za pomocą słowa kluczowego „extends” to dziedziczenie klas. W następnym samouczku omówimy inne słowo kluczowe „implements”, za pomocą którego możemy dziedziczyć interfejsy.
Przykład klasy Employee-SoftwareDeveloper, który wyjaśniliśmy powyżej, można przedstawić jako:
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
IS-A i HAS-A Relacja
Rozważ następującą strukturę klas:
class Mammal{ } class Cow extends Mammal{ }
Jak więc możemy zinterpretować powyższą strukturę? Ponieważ klasa Cow rozszerza się lub dziedziczy Mammal, możemy powiedzieć „Cow JEST Ssak ”lub„ Krowa To rodzaj Ssak'. Stąd ilekroć wyrażamy takie relacje, ta konkretna relacja jest relacją „IS_A”.
W powyższej strukturze wykorzystaliśmy hierarchię dziedziczenia, aby wyrazić fakt, że jeden rodzaj jest innego rodzaju. Tak więc w powyższej strukturze użyliśmy dziedziczenia, aby wskazać związek między krową a ssakiem.
Podobnie możemy wyrazić więcej relacji IS-A w następujący sposób:
Powyżej podano kilka typowych przykładów relacji, które możemy wyrazić za pomocą dziedziczenia w Javie.
Ogólnie rzecz biorąc, relacje typu IS-A można wyrazić za pomocą dziedziczenia.
Zobaczmy teraz poniższy przykład:
Na powyższym schemacie widzimy, że pojazd składa się z dwóch części, tj. Silnika i hamulca. Jak więc możemy opisać ten scenariusz słowami?
Można powiedzieć, że „pojazd zawiera Silnik i pojazd zawiera hamulec ”.
Więc to, co tutaj wyrażamy, to nie relacja „IS-A”, ale relacja zawierająca, w której określamy jeden obiekt jako część innego obiektu.
najlepszy sposób na konwersję filmów z YouTube na mp3
W powyższym przykładzie silnik to część pojazd. To nie jest „ rodzaj ”Pojazdu. To jest ' MA ”Lub relacja zawierania lub kompozycji w Javie. Relacja Has-a w Javie jest wyrażana przez włączenie obiektu jako członka klasy.
Jeśli więc skorzystamy z tego samego przykładu pojazdu powyżej, możemy to wyrazić w następujący sposób:
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
Więc pojazd ma silnik i hamulec. Wyrażając zależność w powyższy sposób nie interesuje nas wewnętrzna realizacja silnika lub hamulca. Klasa pojazdu poinformuje klasy silnika i hamulca, co jest potrzebne, a te klasy to zapewnią.
Podobnie jak relacja IS-A, relacja HAS-A jest również przydatna w ponownym użyciu kodu.
W tym samouczku szczegółowo omówimy dziedziczenie (IS-A), aw następnym samouczku omówimy ograniczenie lub skład (HAS-A).
Przykład dziedziczenia w języku Java
Zaimplementujmy prosty przykład w Javie, aby zademonstrować dziedziczenie.
//example class demonstrating Inheritance in Java class BaseClass { public void display() { System.out.println('BaseClass::Display'); } } //create a new class from BaseClass class DerivedClass extends BaseClass { public void print() { System.out.println('DerivedClass::print'); } } class Main { public static void main(String() args) { //create an object of DerivedClass DerivedClass d1 = new DerivedClass(); d1.display(); //call BaseClass method d1.print(); //call DerivedClass method } }
Wynik:
Powyższy program przedstawia prosty przykład dziedziczenia. Zadeklarowano BaseClass z jedną metodą. Następnie deklarowana jest inna klasa DerivedClass, która rozszerza BaseClass. Ta klasa ma również jedną metodę.
W głównej metodzie programu tworzymy obiekt DerivedClass i za pomocą tego obiektu wywołujemy metodę BaseClass oraz DerivedClass.
Dane wyjściowe pokazują komunikaty wydrukowane za pomocą obu metod. Ponieważ DerivedClass rozszerza BaseClass, a metoda BaseClass jest publiczna, jest widoczna dla DerivedClass.
„Super” słowo kluczowe w Javie
W dziedziczeniu mamy do czynienia z nadklasami lub klasami nadrzędnymi i podrzędnymi. Jeśli musimy pośrednio uzyskać dostęp do elementów nadklasy, w tym zmiennych, metod lub konstruktorów, to potrzebujemy jakiegoś mechanizmu. Ten mechanizm uzyskiwania dostępu do składowych klasy bazowej jest udostępniany w Javie za pomocą słowa kluczowego „super”.
Więc w jakich scenariuszach używamy słowa kluczowego „super” w Javie?
Poniżej wymieniono scenariusze, w których słowo kluczowe „super” może być pomocne.
- Gdy klasa super / podstawowa i klasa podrzędna / pochodna mają takie same nazwy członków, a chcemy uzyskać dostęp do członków nadklasy, używamy słowa kluczowego super.
- Kiedy chcemy uzyskać dostęp do konstruktora nadklasy z podklasy, używamy słowa kluczowego super, aby wywołać słowo kluczowe superklasy.
Na powyższym rysunku pokazaliśmy strukturę dziedziczenia. W klasie bazowej i pochodnej mamy zmienną String myStr. W DerivedClass mamy funkcję printStr (). W tej metodzie użyliśmy słowa kluczowego „super”, aby uzyskać dostęp do zmiennej myStr z klasy bazowej.
Na rysunku pokazaliśmy strzałki wskazujące na zmienną składową klasy bazowej i zmienną pochodną klasy.
Zobaczmy teraz przykłady programowania użycia słowa kluczowego super w celu uzyskania dostępu do różnych członków nadklasy.
# 1) Uzyskaj dostęp do zmiennej członkowskiej superklasy
Poniższy program w języku Java demonstruje użycie słowa kluczowego „super” w celu uzyskania dostępu do zmiennych z klasy bazowej.
class Baseclass { String myStr; } class Subclass extends Baseclass { String myStr; public void printdetails() //Baseclass and Subclass have variables with same name { super.myStr = 'Super'; //refers to parent class member myStr = 'Sub'; System.out.println('Superclass myStr :' + super.myStr+' and Subclass myStr:'+myStr); } } class Main{ public static void main(String() args) { Subclass cobj = new Subclass(); cobj. printdetails (); } }
Wynik:
Powyższy program pokazuje, jak uzyskać dostęp do zmiennych składowych klasy bazowej z klasy pochodnej, gdy zmienne składowe są zadeklarowane z taką samą nazwą zarówno w klasie podstawowej, jak i pochodnej.
Tutaj mamy zmienną myStr, która jest zadeklarowana zarówno w klasie bazowej, jak i pochodnej. W metodzie printdetails odwołujemy się do zmiennej myStr klasy bazowej za pomocą „super.myStr”, podczas gdy do zmiennej klasy pochodnej myStr można się odwoływać bezpośrednio, bez żadnego kwalifikatora.
# 2) Uzyskaj dostęp do metody nadklasy
Następnie zobaczymy, jak wywołać metodę klasy bazowej, gdy metoda w klasie bazowej i metoda w klasie pochodnej mają takie same nazwy.
Pokazuje to poniższy program.
class Parent { String myStr; public void print() //parent class method { myStr = 'Parent class myStr'; System.out.println(myStr); } } class Child extends Parent { String myStr; public void print() //child class method with same name as parent { super.print(); //call Parent class print() method myStr = 'Child class myStr'; System.out.println(myStr); } } class Main{ public static void main(String() args) { Child c_obj = new Child(); c_obj.print (); } }
Wynik:
# 3) Uzyskaj dostęp do Konstruktora Superclass
Kiedy dziedziczymy jedną klasę z innej, zwróć uwagę, że konstruktory nie są dziedziczone.
Jeśli chcemy wykonać jakiekolwiek instrukcje z konstruktorów nadklasy przed wykonaniem konstruktora klasy pochodnej, możemy również wywołać konstruktor nadklasy za pomocą słowa kluczowego „super”.
Do wywołania konstruktora nadklasy używamy wywołania metody.
super (lista parametrów…)
Poniższa metoda demonstruje dostęp do super konstruktorów w Javie.
class Parent { String myStr; public Parent(String name) //base class constructor { myStr = name; } } class Child extends Parent { String myStr; public Child(String name1, String name2) { super(name1); //call base class constructor and pass argument value this.myStr = name2; } public void printDetails() //print details of both constructors { System.out.println('From base class constructor: ' +super.myStr); System.out.println('From derived class constructor: ' + myStr); } } class Main{ public static void main(String() args) { Child cobj = new Child('Super constructor string','Child constructor string'); cobj.printDetails(); } }
Wynik:
Jak widać z powyższego programu, nazwaliśmy konstruktora nadklasy z konstruktora klasy pochodnej. Zwróć uwagę, że zgodnie z konwencją, ilekroć chcemy uzyskać dostęp do konstruktora nadklasy, powinna to być pierwsza instrukcja w konstruktorze klasy pochodnej.
Ponieważ klasa bazowa ma sparametryzowany konstruktor, przekazujemy również odpowiedni parametr do wywołania super podczas wywoływania konstruktora.
Jeśli nie ma jawnego wywołania super konstruktora, jak powyżej, kompilator zawsze automatycznie dodaje niejawne wywołanie super (). Należy jednak pamiętać, że będzie to wywołanie domyślnego konstruktora nadklasy.
Często Zadawane Pytania
Pytanie 1) Co to jest dziedziczenie w Javie?
Odpowiedź: Proces, za pomocą którego jedna klasa uzyskuje właściwości i zachowanie innej klasy, nazywany jest dziedziczeniem. W Javie jedna klasa jest dziedziczona przez inną klasę za pomocą słowa kluczowego „extends”.
Dziedziczenie promuje możliwość ponownego wykorzystania kodu, ponieważ dziedzicząc możemy pozyskać i wykorzystać już istniejące właściwości i zachowanie odziedziczonej klasy bez konieczności pisania zduplikowanego kodu.
P # 2) Dlaczego dziedziczenie jest używane w Javie?
Odpowiedź: Dziedziczenie jest używane głównie w celu poprawy możliwości ponownego wykorzystania aplikacji. Korzystając z dziedziczenia możemy korzystać z gotowych klas w naszej aplikacji. Nie musimy pisać naszego kodu, jeśli mamy gotową funkcjonalność.
Drugim zastosowaniem dziedziczenia jest przesłanianie metod. Aby zaimplementować polimorfizm w czasie wykonywania, korzystamy z dziedziczenia.
P # 3) Jakie są zalety dziedziczenia?
Odpowiedź: Wielokrotne wykorzystanie jest kluczową zaletą dziedziczenia. Dzielenie się kodem poprzez dziedziczenie skutkuje również lepszą czytelnością i lepszą organizacją kodu.
Możemy również osiągnąć polimorfizm w czasie wykonywania poprzez przesłanianie metody przy użyciu dziedziczenia.
P # 4) Jakie są cechy dziedziczenia?
Odpowiedź: Każda cecha lub cecha nabyta od starszego pokolenia odbywa się poprzez dziedziczenie. Na przykład, cecha jasnego oka, która występuje w wielu rodzinach, jest przykładem dziedziczenia.
Z programistycznego punktu widzenia dziedziczenie zapewnia możliwość ponownego użycia i przesłanianie metod.
jak zaktualizować system BIOS Windows 10
P # 5) Czy super () jest konieczne?
Odpowiedź: Nie. Ponieważ jeśli nie wywołamy super (), kompilator zrobi to niejawnie za nas. Ale wtedy niejawne wywołanie super () jest domyślnym konstruktorem klasy bazowej. Więc jeśli potrzebujemy sparametryzowanego konstruktora z klasy bazowej, powinniśmy wywołać go jawnie.
Wniosek
W tym samouczku przedstawiliśmy koncepcję dziedziczenia w Javie. Dziedziczenie to proces uzyskiwania właściwości i zachowania jednej klasy w innej klasie. Omówiliśmy tutaj podstawową definicję i terminologię, której używamy w dziedziczeniu.
Omówiliśmy również relacje Is-A i Has-A w Javie. Dziedziczenie jest używane do implementacji relacji Is-A.
Następnie omówiliśmy słowa kluczowe „extends” i „super” w Javie, które są używane w związku z dziedziczeniem. Rozszerzenia służy do implementacji dziedziczenia. Słowo kluczowe super służy do odwoływania się do konstruktora, metody lub zmiennej klasy bazowej z klasy pochodnej.
=> Sprawdź idealny przewodnik szkoleniowy języka Java tutaj.
rekomendowane lektury
- Samouczek klasy skanera Java z przykładami
- Co to jest wektor Java | Samouczek klasy wektorowej Java z przykładami
- Java Enum: samouczek wyliczania w języku Java z przykładami
- Metoda Java String length () z przykładami
- Samouczek Java Float z przykładami programowania
- Dziedziczenie w C ++
- Rodzaje dziedziczenia w C ++
- Pojęcia dotyczące OOP w języku Python (klasy, obiekty i dziedziczenie w Pythonie)