Наслеђе је најмоћнија карактеристика објектно оријентисаног програмирања. Омогућава нам да наследимо својства једне класе у другу класу. У овом одељку ћемо разговарати врсте наслеђивања у Јави дубински са примерима из стварног живота. Такође, креираћемо Јава програме за имплементацију концепта различитих типова наслеђивања.
Наслеђе
Наслеђе је механизам покретања нове класе из постојеће класе. Постојећа (стара) класа је позната као базна класа или супер класа или родитељска класа . Нова класа је позната као а изведена класа или подкласа или дечји разред . Омогућава нам да користимо својства и понашање једне класе (родитеља) у другој класи (дете).
орацле скл није једнак
Класа чија се својства наслеђују позната је као родитељска класа а класа која наслеђује својства родитељске класе је позната као дечји разред . Дакле, успоставља однос између класе родитеља и детета који је познат као родитељ-дете или Је однос.
Претпоставимо да постоје две именоване класе оче и дете а ми желимо да наследимо својства класе Отац у класи Дете. То можемо постићи коришћењем протеже кључна реч.
//inherits the properties of the Father class class Child extends Father { //functionality }
Када треба да користимо наслеђе?
Наслеђе обезбеђује могућност поновне употребе кода, посебно када постоји велики обим кода за поновну употребу. Такође успоставља однос између различитих класа који је познат као а Је однос. Можемо га користити и ако желимо да постигнемо превладавање метода .
Тачке које треба запамтити
- Конструктор се не може наследити у Јави.
- Приватни чланови се не наслеђују у Јави.
- Циклично наслеђивање није дозвољено у Јави.
- Додели родитељску референцу подређеним објектима.
- Конструктори се извршавају због супер() присутног у конструктору.
Врсте наслеђа
Јава подржава следећа четири типа наслеђивања:
- Сингле Инхеританце
- Наслеђивање на више нивоа
- Хијерархијско наслеђе
- Хибридно наслеђе
Напомена: Вишеструко наслеђивање није подржано у Јави.
Хајде да разговарамо о сваком са одговарајућим примером.
Сингле Инхеританце
У појединачном наслеђивању, поткласа је изведена из само једне супер класе. Наслеђује својства и понашање једнородитељске класе. Понекад је познат и као једноставно наслеђе .
На горњој слици, Емплоиее је родитељска класа, а Екецутиве је подређена класа. Класа Екецутиве наслеђује сва својства класе Емплоиее.
Хајде да имплементирамо јединствени механизам наслеђивања у Јава програм.
Екецутиве.јава
class Employee { float salary=34534*12; } public class Executive extends Employee { float bonus=3000*6; public static void main(String args[]) { Executive obj=new Executive(); System.out.println('Total salary credited: '+obj.salary); System.out.println('Bonus of six months: '+obj.bonus); } }
Излаз:
хасхмап у Јави
Total salary credited: 414408.0 Bonus of six months: 18000.0
Наслеђивање на више нивоа
Ин вишестепено наслеђе , класа је изведена из класе која је такође изведена из друге класе назива се наслеђивање на више нивоа. Једноставним речима, можемо рећи да се класа која има више од једне родитељске класе назива наслеђивање на више нивоа. Имајте на уму да часови морају бити на различитим нивоима. Дакле, постоји једна основна класа и једна изведена класа, али више средњих основних класа.
На горњој слици, класа Маркс наслеђује чланове или методе класе Студенти. Одељење Спорт наслеђује чланове разреда Маркс. Дакле, одељење Ученик је матично одељење одељења Ознаке, а класа Ознаке је родитељ одељења Спорт. Дакле, класа Спортс имплицитно наслеђује својства ученика заједно са класом Маркс.
Хајде да имплементирамо механизам наслеђивања на више нивоа у Јава програму.
МултилевелИнхеританцеЕкампле.јава
//super class class Student { int reg_no; void getNo(int no) { reg_no=no; } void putNo() { System.out.println('registration number= '+reg_no); } } //intermediate sub class class Marks extends Student { float marks; void getMarks(float m) { marks=m; } void putMarks() { System.out.println('marks= '+marks); } } //derived class class Sports extends Marks { float score; void getScore(float scr) { score=scr; } void putScore() { System.out.println('score= '+score); } } public class MultilevelInheritanceExample { public static void main(String args[]) { Sports ob=new Sports(); ob.getNo(0987); ob.putNo(); ob.getMarks(78); ob.putMarks(); ob.getScore(68.7); ob.putScore(); } }
Излаз:
ипцонфиг на Убунту
registration number= 0987 marks= 78.0 score= 68.7
Хијерархијско наслеђе
Ако је одређени број класа изведен из једне основне класе, она се зове хијерархијско наслеђе .
На горњој слици, класе Наука, Трговина и Уметност наслеђују једно родитељско одељење под називом Студент.
Хајде да имплементирамо хијерархијски механизам наслеђивања у Јава програм.
ХиерарцхицалИнхеританцеЕкампле.јава
//parent class class Student { public void methodStudent() { System.out.println('The method of the class Student invoked.'); } } class Science extends Student { public void methodScience() { System.out.println('The method of the class Science invoked.'); } } class Commerce extends Student { public void methodCommerce() { System.out.println('The method of the class Commerce invoked.'); } } class Arts extends Student { public void methodArts() { System.out.println('The method of the class Arts invoked.'); } } public class HierarchicalInheritanceExample { public static void main(String args[]) { Science sci = new Science(); Commerce comm = new Commerce(); Arts art = new Arts(); //all the sub classes can access the method of super class sci.methodStudent(); comm.methodStudent(); art.methodStudent(); } }
Излаз:
сесија је истекла
The method of the class Student invoked. The method of the class Student invoked. The method of the class Student invoked.
Хибридно наслеђе
Хибридна средства се састоје од више од једног. Хибридно наслеђивање је комбинација две или више врста наслеђивања.
На горњој слици, деда је супер класа. Класа Фатхер наслеђује својства класе ГрандФатхер. Пошто отац и деда представљају једно наслеђе. Даље, класу Отац наслеђује класа Син и Ћерка. Тако Отац постаје родитељска класа за Сина и Ћерку. Ове класе представљају хијерархијско наслеђе. Комбиновано, означава хибридно наслеђе.
Хајде да имплементирамо хибридни механизам наслеђивања у Јава програм.
Ћерка.јава
//parent class class GrandFather { public void show() { System.out.println('I am grandfather.'); } } //inherits GrandFather properties class Father extends GrandFather { public void show() { System.out.println('I am father.'); } } //inherits Father properties class Son extends Father { public void show() { System.out.println('I am son.'); } } //inherits Father properties public class Daughter extends Father { public void show() { System.out.println('I am a daughter.'); } public static void main(String args[]) { Daughter obj = new Daughter(); obj.show(); } }
Излаз:
I am daughter.
Вишеструко наслеђивање (није подржано)
Јава не подржава вишеструко наслеђивање због двосмислености. На пример, размотрите следећи Јава програм.
Демо.јава
class Wishes { void message() { System.out.println('Best of Luck!!'); } } class Birthday { void message() { System.out.println('Happy Birthday!!'); } } public class Demo extends Wishes, Birthday //considering a scenario { public static void main(String args[]) { Demo obj=new Demo(); //can't decide which classes' message() method will be invoked obj.message(); } }
Горњи код даје грешку јер компајлер не може да одлучи који метод мессаге() ће бити позван. Из тог разлога, Јава не подржава вишеструко наслеђивање на нивоу класе, али се може постићи путем интерфејс .