what is inheritance java tutorial with examples
Този урок обяснява концепцията за наследяване в Java, свързани термини като „разширява“ и „супер“ ключови думи, подклас, суперклас, връзки Is-A, HAS-A и др .:
След като научихме за трите стълба на ООП, а именно абстракция, капсулиране и полиморфизъм в Java, стигнахме до последния стълб на ООП, т.е.наследяване.
Започвайки с този урок, ще обсъдим наследяването в Java в следващите няколко урока.
=> Прочетете серията Easy Training Training.
Какво ще научите:
Наследяване в Java
Наследяването в Java може да се определи като техника или процес, при който един обект от клас придобива поведението и свойствата на друг обект. Това се прави чрез наследяване на класа или установяване на връзка между два класа.
Например, жаба е земноводни. Подобно на други животни от класа на земноводните, жабата може да има много характеристики, които са общи за другите животни. Така че тук земноводните са видове и животни като жаби са негови членове.
Ако трябва да представим видовете земноводни и членовете им в софтуерно представяне, използвайки ООП, тогава това, което ще направим, е да разработим клас „Амфибия“, съдържащ свойства или поведение, които са общи за земноводните като цяло.
По този начин не е нужно да дублираме общите свойства и поведение за всяко животно, което описваме земноводни. Ние директно ще създадем клас за земноводни животни и наследяваме от класа на земноводните, както е показано по-долу.
Така че обща идея зад характеристиката „Наследяване“ е, че можем да създаваме нови класове чрез наследяване от вече съществуващите класове. Чрез наследяване от вече съществуващите класове, ние можем да използваме свойствата и поведението на тези класове. Освен това можем да добавим още свойства и / или поведение в новия ни клас.
Функцията за наследяване изобразява „ родител-дете ”Връзка или връзка в Java. Класът, от който се наследява новият клас, се нарича „ Родителски клас ”, Докато новият клас се нарича„ Детски клас ”.
Наследството се използва главно:
- За заместване на метода за да можем да постигнем полиморфизъм по време на изпълнение .
- Да се използвайте повторно кода . Чрез наследяване от вече съществуващите класове ние гарантираме многократна употреба на кода.
Обща терминология, използвана при наследяване
- Многократна употреба: Механизъм, чрез който новите класове използват повторно полета или свойства и методи на съществуващ клас.
- Клас: Класът е колекция от обекти, които имат общи свойства. Клас може да се разглежда като шаблон или като синьо отпечатване на обектите.
- Подклас / Детски клас: Клас, който наследява от друг клас, е подклас или дъщерен клас или производен клас.
- Супер клас / родителски клас: Клас, който се наследява от друг клас за придобиване на свойства и методи, се нарича родителски клас или суперклас или базов клас.
Следващата йерархия на наследяване е пример, показващ суперклас и подклас.
Имаме клас Employee с полета OrganisationName и EmployeeId. Може да има и други полета като име на служител, отдел и други данни за служителя.
След това извличаме друг клас, наречен „SoftwareDeveloper“ със заплатата и предимствата на полето. Класът SoftwareDeveloper клас наследява от класа Employee и следователно придобива свойствата на класа Employee.
Както е показано на горната диаграма, тук класът на служителя е клас Super или Base, а SoftwareDeveloper е подклас или производен клас.
‘Extends’ Ключова дума в Java
В Java ключовата дума ‘extends’ се използва за наследяване на класа.
Общият синтаксис на наследяването на Java е даден по-долу:
class SubClass extends SuperClass { //subclass methods and fields }
Както е показано по-горе, ключовата дума ‘extends’ се появява след името на класа в синтаксиса на декларацията на класа.
Ключовата дума ‘extends’ показва, че създаваме нов клас ‘SubClass’, който ще наследи свойствата и поведението от ‘SuperClass’. С други думи, ключовата дума extends показва, че изграждаме нов клас SubClass върху съществуващата функционалност на SuperClass.
Наследството, реализирано с ключовата дума ‘extends’, е наследството на класа. В следващия урок ще обсъдим друга ключова дума ‘изпълнява’, използвайки която можем да наследим интерфейси.
Пример за класа Employee-SoftwareDeveloper, който обяснихме по-горе, може да бъде представен като:
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
ВРЪЗКА IS-A И HAS-A
Помислете за следната структура на класа:
class Mammal{ } class Cow extends Mammal{ }
И така, как можем да интерпретираме горната структура? Тъй като класът Крава се разширява или наследява Бозайник, можем да кажем „Крава Е Бозайник “или„ Крава Е вид Бозайник'. Следователно, когато изразяваме такива взаимоотношения, тази конкретна връзка е връзката “IS_A”.
В горната структура използвахме йерархията на наследяването, за да изразим факта, че един вид е от друг вид. Така че в горната структура използвахме наследство, за да посочим връзката между Кравата и Бозайниците.
По същия начин можем да изразим още някои взаимоотношения IS-A, както следва:
По-горе са дадени някои от често срещаните примери за взаимоотношения, които можем да изразим, използвайки наследяване в Java.
По принцип връзките IS-A могат да бъдат изразени чрез наследяване.
Сега нека видим примера по-долу:
В горната диаграма виждаме, че дадено превозно средство има две части, т.е. двигател и спирачка. И така, как можем да изразим този сценарий с думи?
Можем да кажем, че „превозно средство съдържа двигател и превозно средство съдържа спирачка ”.
Така че това, което изразяваме тук, не е връзката „IS-A“, а връзката за ограничаване, при която ние посочваме един обект като част от друг обект.
как да отворите нов проект в затъмнение
В горния пример двигателят е a част от превозно средство. Това не е „ един вид ' превозно средство. Това е ' ИМА ”Или връзка на съдържанието или композицията в Java. Връзката Has-a в Java се изразява чрез включване на обект като член на класа.
Така че, ако следваме същия пример за превозно средство по-горе, тогава можем да го изразим както по-долу:
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
Така че превозното средство има двигател и спирачка. Изразявайки връзката по горния начин, ние не се интересуваме от вътрешното изпълнение на Двигател или спирачка. Класът на превозното средство ще съобщи на класовете двигатели и спирачки какво е необходимо и тези класове ще го осигурят.
Подобно на връзката IS-A, връзката HAS-A също е полезна при повторното използване на кода.
В този урок ще обсъдим подробно наследяването (IS-A), а в следващия урок ще обсъдим Ограничение или Състав (HAS-A).
Пример за наследяване на Java
Нека да приложим прост пример в Java, за да демонстрираме наследяване.
//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 } }
Изход:
Горната програма показва прост пример за наследяване. Декларира се BaseClass с един метод. След това се декларира друг клас DerivedClass, който разширява BaseClass. Този клас също има един метод.
В основния метод на програмата създаваме обект DerivedClass и използвайки този обект наричаме BaseClass, както и метода DerivedClass.
Резултатът показва съобщенията, отпечатани и от двата метода. Тъй като DerivedClass разширява BaseClass и методът BaseClass е публичен, той е видим за DerivedClass.
„Супер“ ключова дума в Java
В наследството се занимаваме със суперкласове или класове за родители и детски класове. Ако трябва да имаме междинен достъп до членове на суперклас, включително променливи, методи или конструктори, тогава трябва да имаме някакъв механизъм. Този механизъм за достъп до членовете на базовия клас се предоставя в Java с помощта на ключова дума „super“.
И така, в кои сценарии използваме ключовата дума „супер“ в Java?
По-долу са изброени сценарии, в които ключова дума „супер“ може да бъде полезна.
- Когато класът super / base и sub / производният имат еднакви имена за членове и ние искаме да получим достъп до членовете на superclass, тогава използваме ключовата дума super.
- Когато искаме да получим достъп до конструктора на суперклас от подкласа, тогава използваме ключовата дума super, за да извикаме ключовата дума superclass.
На горната фигура показахме наследствена структура. В базовия, както и в производния клас, имаме String променлива myStr. В derivaClass имаме функция printStr (). В този метод използвахме ключовата дума ‘super’ за достъп до променливата myStr от базовия клас.
На фигурата показахме стрелките, сочещи към променливата на член на базовия клас и променливата на производен клас.
Сега нека видим примерите за програмиране на използването на ключовата дума super за достъп до различни членове на суперкласа.
# 1) Достъп до променлива за член на Superclass
Следващата програма Java демонстрира използването на ключова дума „super“ за достъп до променливи от базовия клас.
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 (); } }
Изход:
Горната програма показва как да получите достъп до променливите-членове на базовия клас от производния клас, когато променливите-членове са декларирани с едно и също име както в базовия, така и в производния клас.
Тук имаме myStr променлива, която е декларирана в базовия, както и производен клас. В метода printdetails ние се позоваваме на променливата myStr на базовия клас, използвайки “super.myStr”, докато производната променлива на клас myStr се осъществява директно без никакъв квалификатор.
# 2) Достъп до метод Superclass
След това ще видим как да извикаме метода на базовия клас, когато методът в базовия клас и методът в производния клас имат еднакви имена.
Следващата програма демонстрира това.
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 (); } }
Изход:
# 3) Достъп до конструктор на Superclass
Когато наследяваме един клас от друг, имайте предвид, че конструкторите не се наследяват.
Ако искаме да изпълним някакви инструкции от конструктори на суперклас, преди да изпълним конструктора на производен клас, тогава можем също да извикаме конструктора на суперклас, използвайки ключовата дума ‘super’.
За извикване на конструктора на суперклас използваме извикването на метода.
супер (списък с параметри ...)
Следващият метод демонстрира достъпа до супер конструктори в Java.
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(); } }
Изход:
Както можем да видим от горната програма, ние сме извикали конструктора на суперкласа от конструктора на производен клас. Обърнете внимание, че по конвенция, когато искаме да осъществим достъп до конструктора на суперклас, той трябва да бъде първият израз в конструктора на производния клас.
Тъй като базовият клас има параметризиран конструктор, ние също предаваме съответния параметър на супер повикването, докато извикваме конструктора.
Ако няма изрично извикване към супер конструктора, както по-горе, тогава компилаторът винаги автоматично добавя неявно извикване към super (). Но имайте предвид, че това ще бъде извикване на конструктора по подразбиране на суперкласа.
често задавани въпроси
В # 1) Какво е наследяване в Java?
инструменти за тестване на производителността на уеб приложения
Отговор: Процес, чрез който един клас придобива свойствата и поведението на друг клас, се нарича наследяване. В Java един клас се наследява от друг клас, използвайки ключовата дума ‘extends’.
Наследяването насърчава повторната употреба на код, тъй като чрез наследяване можем да придобием и използваме вече съществуващите свойства и поведение на наследен клас, без да се налага да пишем дублиран код.
В # 2) Защо наследството се използва в Java?
Отговор: Наследството се използва главно за подобряване на повторната употреба на приложението. Използвайки наследяване, можем да използваме готови класове в нашето приложение. Не е нужно да пишем кода си, ако имаме готова функционалност.
Второто използване на наследяването е в замяна на метода. За да приложим полиморфизъм по време на работа, ние използваме наследяването.
В # 3) Какви са предимствата на наследяването?
Отговор: Многократната употреба е ключовото предимство на наследяването. Споделянето на код чрез наследяване също води до по-добра четливост и по-добра организация на кода.
Също така можем да постигнем полиморфизъм по време на изпълнение чрез замяна на метод, използващ наследяване.
В # 4) Какви са характеристиките на наследяването?
Отговор: Всяка характеристика или характеристика, придобити от по-старото поколение, се извършва чрез наследяване. Например, чертата на светлинното око, която се среща в много семейства, е пример за наследство.
От гледна точка на програмирането, наследяването предоставя характеристиката на повторната употреба и отменянето на метода.
В # 5) Необходима ли е супер ()?
Отговор: Не. Защото, ако не се обадим на super (), компилаторът го прави имплицитно за нас. Но тогава неявното извикване на super () е конструкторът на базовия клас по подразбиране. Така че, ако се нуждаем от параметризиран конструктор от базов клас, тогава трябва да го извикаме изрично.
Заключение
В този урок въведохме концепцията за наследяване в Java. Наследяването е процес на придобиване на свойствата и поведението на един клас в друг клас. Тук обсъдихме основната дефиниция и терминология, които използваме при наследяването.
Също така обсъдихме връзките Is-A и Has-A в Java. Наследството се използва за осъществяване на връзка Is-A.
След това обсъдихме ключовите думи ‘extends’ и ‘super’ в Java, които се използват във връзка с наследяването. Extends се използва за реализиране на наследяване. Ключовата дума super се използва за препращане към конструктора, метода или променливата на базовия клас от производния клас.
=> Вижте Перфектното ръководство за обучение по Java тук.
Препоръчително четене
- Урок за клас Java Scanner с примери
- Какво е Java Vector | Урок за Java Vector Class с примери
- Java Enum: Урок за изброяване на Java с примери
- Дължина на низа на Java () Метод с примери
- Урок за Java Float с примери за програмиране
- Наследяване в C ++
- Видове наследяване в C ++
- Концепции на ООП на Python (класове, обекти и наследяване на Python)