Наслеђивање у Јави је механизам у коме један објекат стиче сва својства и понашања родитељског објекта. То је важан део ООПс (Објектно оријентисани систем програмирања).
Идеја која стоји иза наслеђивања у Јави је да можете креирати нове класе који су изграђени на постојећим класама. Када наследите постојећу класу, можете поново да користите методе и поља родитељске класе. Штавише, можете додати нове методе и поља у своју тренутну класу.
Наслеђе представља ИС-А однос који је познат и као а родитељ-дете однос.
Зашто користити наслеђивање у Јави
- За Метход Оверридинг (тако полиморфизам времена извршавања Може се постићи).
- За поновну употребу кода.
Термини који се користе у наслеђивању
Синтакса Јава наслеђа
class Subclass-name extends Superclass-name { //methods and fields }
Тхе проширује кључну реч означава да правите нову класу која је изведена из постојеће класе. Значење 'проширује' је повећање функционалности.
дугме у централном цсс-у
У терминологији Јаве, класа која је наслеђена назива се родитељ или суперкласа, а нова класа се назива дете или поткласа.
Пример наслеђивања Јава
Као што је приказано на горњој слици, Програмер је поткласа, а Емплоиее је надкласа. Однос између две класе је Програмер ИС-А Емплоиее . То значи да је програмер врста запосленог.
вук против лисице
class Employee{ float salary=40000; } class Programmer extends Employee{ int bonus=10000; public static void main(String args[]){ Programmer p=new Programmer(); System.out.println('Programmer salary is:'+p.salary); System.out.println('Bonus of Programmer is:'+p.bonus); } }Тестирајте одмах
Programmer salary is:40000.0 Bonus of programmer is:10000
У горњем примеру, објекат Програмер може да приступи пољу сопствене класе као и класе Емплоиее, односно поновне употребе кода.
Типови наслеђивања у Јави
На основу класе, у Јави могу постојати три типа наслеђивања: једностепено, вишестепено и хијерархијско.
У јава програмирању, вишеструко и хибридно наслеђивање је подржано само преко интерфејса. Касније ћемо научити о интерфејсима.
Напомена: Вишеструко наслеђивање није подржано у Јави кроз класу.
Када једна класа наследи више класа, то је познато као вишеструко наслеђивање. На пример:
Пример појединачног наслеђа
Када класа наследи другу класу, позната је као а једно наслеђе . У примеру датом у наставку, класа Дог наслеђује класу Анимал, тако да постоји једно наслеђе.
Датотека: ТестИнхеританце.јава
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }}
Излаз:
barking... eating...
Пример наслеђивања на више нивоа
Када постоји ланац наслеђа, то је познато као вишестепено наслеђе . Као што можете видети у примеру датом у наставку, класа БабиДог наслеђује класу Дог која поново наслеђује класу Анимал, тако да постоји наслеђивање на више нивоа.
то стринг метода у Јави
Датотека: ТестИнхеританце2.јава
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class BabyDog extends Dog{ void weep(){System.out.println('weeping...');} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }}
Излаз:
weeping... barking... eating...
Пример хијерархијског наслеђа
Када две или више класа наслеђују једну класу, то је познато као хијерархијско наслеђе . У примеру датом испод, класе Дог и Цат наслеђују класу Анимал, тако да постоји хијерархијско наслеђе.
Датотека: ТестИнхеританце3.јава
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class Cat extends Animal{ void meow(){System.out.println('meowing...');} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }}
Излаз:
meowing... eating...
П) Зашто вишеструко наслеђивање није подржано у Јави?
Да би се смањила сложеност и поједноставио језик, вишеструко наслеђивање није подржано у Јави.
јава приоритетни ред
Размотрите сценарио где су А, Б и Ц три класе. Ц класа наслеђује А и Б класе. Ако А и Б класе имају исти метод и ви га позивате из објекта подређене класе, биће нејасноћа у позивању методе А или Б класе.
Пошто су грешке у времену превођења боље од грешака током извођења, Јава приказује грешку у времену превођења ако наследите 2 класе. Дакле, без обзира да ли имате исти или другачији метод, доћи ће до грешке у времену компајлирања.
class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were public static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } }Тестирајте одмах
Compile Time Error