types inheritance java single vs multiple inheritance
Уз једноставне примере научите све о разним врстама наслеђивања у Јави. Сазнајте да ли Јава подржава вишеструко наслеђивање:
Читаоцима смо у нашем последњем водичу представили наслеђивање на Јави заједно са разним основним концептима повезаним са наследством.
У овом упутству ћемо истражити даље тему наслеђивања и сазнати више о врстама наследства.
=> Овде проверите СВЕ Јава туторијале.
наведите и објасните најмање две ствари које можете постићи тестирањем софтвера за безбедносна питања.
Шта ћете научити:
Врсте наслеђивања у Јави
У зависности од начина наслеђивања класа и броја наслеђа класа, имамо следеће типове наследства као што је приказано на доњој слици.
Као што је приказано на горњој слици, постоји пет врста наслеђа у објектно оријентисаном програмирању, као што је описано у наставку:
# 1) Једно наслеђе: Када изведена класа или подкласа наслеђује само једну базу или суперкласу, то је једно наследство.
# 2) Наслеђивање на више нивоа: У вишеразинском наслеђивању имамо више нивоа у којима класа наслеђује основну класу, а изведену класу наслеђује друга класа.
# 3) Хијерархијско наслеђивање: Хијерархија наслеђа се формира у овој врсти наслеђивања када суперкласу наследи више класа.
# 4) Вишеструко наслеђивање: Вишеструко наслеђивање је оно у којем класа може наследити својства и понашање од више родитеља.
# 5) Хибридно наслеђивање: Када се комбинују један или више типова наследства, онда оно постаје хибридно наследство.
Имајте на уму да Јава подржава само наслеђивање с једним, више нивоа и хијерархијско наслеђивање помоћу класа. Јава не подржава вишеструко и хибридно наслеђивање са класама.
Сада ћемо детаљно разговарати о свакој врсти наслеђа са примерима програмирања.
Једно наслеђивање у Јави
Једно наслеђе је приказано како је приказано доле:
Овде подкласа наслеђује једну суперкласу. Ово је једно наслеђе. Свака животиња попут Пса наслеђује од Животињске врсте. Ово је најједноставнији облик наследства.
Доље је дат Јава програм који објашњава једно наслеђивање.
//base class:Animal class Animal { void Action_eat() { System.out.print('eating...'); } } //derived class:Dog class Dog extends Animal { void Action_bark() { System.out.print('barking...'); } } class Main{ public static void main(String args()){ Dog d=new Dog(); //create an object of derived class System.out.print('The dog is '); d.Action_bark(); //call derived class method System.out.print('
The dog is '); d.Action_eat(); //call base class method } }
Излаз:
Овде имамо један начин јести (Ацтион_еат) у основној класи Анимал који је заједнички животињским врстама. Имамо изведену класу Пас која потиче из класе Анимал. У класи Пас имамо методу специфичну за псеће врсте, кору (Ацтион_барк).
Затим у главној методи креирамо објекат Дог, а како је класа Дог наследила класу Анимал, овај објекат може позвати и јести, као и барк метод.
Вишеразинско наслеђивање у Јави
У наслеђивању на више нивоа имамо ланац наследства. То значи да имамо родитељску класу коју наслеђује изведена класа. Изведена класа заузврат делује као родитељ другој класи и тако даље.
Наслеђе на више нивоа може се представити на следећи начин:
Као што се види на горњој слици, постоји родитељска класа А. Класа Б наслеђује од класе А. Затим постоји још једна класа Ц која заузврат наслеђује од класе Б. Тако можемо видети да она чини ланац наследства. Овде класа Б постаје посредничка класа која повезује класе А и Ц.
Настављајући са нашим примером класе животиња у наставку, можемо имати класу пас која је изведена из класе животиња. Тада можемо добити још једну псићу класе, која је беба пас, изведена из класе паса. На овај начин можемо добити наслеђе на више нивоа.
Пример програма за вишеразинско наслеђивање приказан је испод.
import java.util.*; import java.lang.*; import java.io.*; //parent class A class A { public void print_A() { System.out.print('SoftwareTestingHelp '); } } //Derived class B - intermediary class B extends A { public void print_B() { System.out.print('Java Series '); } } //Derived Class C class C extends B { public void print_C() { System.out.print('Tutorials'); } } public class Main { public static void main(String() args) { C c_obj = new C(); //create Class C obj c_obj.print_A(); //call grandparent class method c_obj.print_B(); //call parent class method c_obj.print_C(); //call member method } }
Излаз:
Програмирали смо тачно приказан ланац горе. Затим у главној методи креирамо објекат класе Ц. Објект класе Ц тада може приступити методама свог родитеља Б као и баке и деке А.
Хијерархијско наслеђивање на Јави
Класа може из ње извести више класа. Дакле, имамо једну базу или суперкласу и више подкласа. Ова врста наслеђа назива се „хијерархијско наследство“.
Хијерархијско наслеђивање је схематски представљено у наставку:
Као пример хијерархијског наслеђа, можемо представити класу Анимал као суперкласу, а затим из ње изведемо више животиња као што су Мачка, Пас, Крава итд.
Јава програм у наставку показује Хијерархијско наслеђивање у Јави.
//class Parent class Parent { public void print_parent() { System.out.println('In ::Parent class'); } } //child1 class class Child1 extends Parent { public void print_child1() { System.out.println('In ::Child1 class'); } } //child2 class class Child2 extends Parent { public void print_child2() { System.out.println('In ::Child2 class'); } } //child3 class class Child3 extends Parent { public void print_child3() { System.out.println('In ::Child3 class'); } } public class Main { public static void main(String() args) { Child1 ch1 = new Child1(); //create a Child1 class object ch1.print_child1(); //call its member method Child2 ch2 = new Child2(); //create a Child2 class object ch2.print_child2(); //call its member method Child3 ch3 = new Child3(); //create a Child3 class object ch3.print_child3(); //call its member method ch3.print_parent(); //call parent class method with any object } }
Излаз:
Као што видимо из програма, имамо родитељски разред и три подређена разреда изведена од овог родитеља. У главној методи креирамо објекат сваке од подређених класа и позивамо њихове одговарајуће чланске методе.
Да бисте позвали методе родитељске класе, имајте на уму да можемо да користимо било који објекат подређене класе јер сви имају приступ родитељској класи.
Вишеструко наслеђивање у Јави
Вишеструко наслеђивање је ситуација у којој једна класа може наследити више класа, тј. Једна класа може имати више родитеља. Радећи ово, класа може имати више од једне суперкласе и тако стећи својства и понашање свих својих суперкласа.
Дијаграмски приказ вишеструког наслеђа приказан је у наставку:
Као што је горе приказано, можемо извести класу из више класа истовремено. На овај начин изведена класа ће стећи особине свих својих родитељских класа. То може довести до озбиљних нејасноћа, посебно када су наслеђене особине исте.
Белешка:Јава не подржава вишеструко наслеђивање помоћу класа. Али подржава вишеструко наслеђивање помоћу интерфејса о чему ћемо разговарати у следећем водичу о наслеђивању.
Будући да Јава не подржава вишеструко наслеђивање са класама, нећемо улазити у детаље. Међутим, касније у овом упутству, покушаћемо да разумемо разлоге који Јава не подржавају вишеструко наслеђивање.
Хибридно наслеђивање у Јави
Хибридно наслеђивање је комбинација једне или више врста наследства о којима смо горе говорили. Свака комбинација, међутим, резултира типом вишеструког наслеђивања које Јава не подржава.
Хибридно наслеђе може се схематски представити на следећи начин.
Стога Јава не подржава хибридно наслеђивање као ни класе. Али као и вишеструко наслеђивање, и ми можемо да имплементирамо хибридно наслеђивање у Јави користећи интерфејсе. О томе ћемо детаљно разговарати у нашем следећем упутству.
Зашто Јава не подржава вишеструко наслеђивање?
Јава тежи једноставности програма. Ово се односи чак и на ООП функције. Дакле, када је реч о вишеструком наслеђивању, могу се појавити неке двосмислене ситуације када класу изведемо из више класа.
Сада да схватимо проблеме који могу настати када имамо више наслеђа у нашем програму.
Размотрите следеће системе вишеструког наслеђа.
Ако видимо горњи систем, то је саморазумљиво. Овде су класа А и класа двородитељске класе које је наследила класа Ц. Сада смо показали да и класе А и Б имају метод са истим именом, тј. Принт (). Дакле, када класа Ц наследи А и Б, тада ће добити обе верзије методе принт ().
У овом случају, класа Ц неће знати коју методу треба да наследи. Ово је двосмислена ситуација коју смо горе поменули и која се јавља у случају вишеструког наслеђа.
Дакле, Јава издаје грешку компајлера када класа наслеђује више од једне класе.
Следећи Јава програм ће то показати.
class A{ void print(){ System.out.println('Class A :: print()'); } } class B{ void print(){ System.out.println('Class B :: print()'); } } class C extends A , B{ //let C inherit from A and B } public class Main { public static void main(String() args) { C cObj = new C(); c.print(); } }
Излаз:
Као што се види из резултата, Јава компајлер издаје грешку када утврди да класа проширује две класе.
Иако Јава не дозвољава наслеђивање две класе истовремено, нуди нам пут око овог ограничења. Можемо симулирати вишеструко наслеђивање користећи интерфејсе уместо класа. О томе ћемо разговарати у нашим наредним туторијалима.
Дијамантски проблем
Вишеструко наслеђивање доводи до ситуације која се назива „Дијамантски проблем“.
Узмите у обзир да имамо следећи систем наследства.
class Super{ void show(){} } class Sub1 extends super{ void show1(){} } class Sub2 extends super{ void show2(){} } class sample extends Sub1,Sub2{ //Sample class code here }
Овај систем можемо схематски представити како је приказано доле:
Као што видимо из горњег дијаграма, читав систем наслеђивања појављује се у облику дијаманта. Због ове дијамантске структуре, двосмисленост је названа „Дијамантски проблем“.
Као што је раније објашњено за вишеструко наслеђивање, овде је двосмисленост вишеструки број копија методе схов () које класа Сампле добија као резултат наслеђивања. Како постоји више путања, постиже се метода схов () и постоји нејасноћа у вези коју копију наследити.
Као и код вишеструког наслеђивања, проблем дијаманта такође се може решити помоћу интерфејса.
Правила наслеђивања у Јави
До сада смо видели основе наслеђивања као и типове наслеђивања у Јави, наведимо нека правила која морамо следити током развоја апликација са наслеђивањем.
Правило # 1: Јава не подржава вишеструко наслеђивање
Као што смо већ видели, Јава не подржава вишеструко наслеђивање у било ком облику. Када се у програму покуша вишеструко наслеђивање, Јава компајлер издаје грешку компајлера.
Правило # 2: Јава не дозвољава циклично наслеђивање
Класа која наслеђује себе да би формирала циклус назива се циклично наслеђивање.
Размотрите следеће класе, класа1 и класа2.
класа цласс1 проширује класу 2 {}
класа цласс2 проширује класу 1 {}
Горе наведена ситуација чини петљу. Ово није дозвољено на Јави.
Правило бр. 3: Не можемо наследити чланове приватних података
Већ смо у теми „Модификатори приступа“ научили да се чланови са приватним приступом не могу наследити.
Правило # 4: Конструктори се не наслеђују
Како се конструктори користе за креирање објеката класе, они се не наслеђују из једне класе у другу.
Правило бр. 5: Родитељску референцу можемо користити за приступ подређеним објектима
Већ смо видели разне примере наследства. Можемо створити референцу типа родитељске класе, а затим јој доделити изведени објекат класе креиран помоћу нове кључне речи.
Ако је супер суперкласа, а суб је класа изведена из супер, као што је приказано доле.
class super{} class sub extends super{ public static void main(String() args){ super s_obj = new sub(); } }
Правило # 6: Надређени конструктори се извршавају због супер () у изведеним конструкторима
Једно од правила каже да се конструктори не могу наследити. Али конструктор суперкласе може се извршити унутар конструктора изведене класе помоћу позива супер ().
Често постављана питања
П # 1) Коју врсту наслеђивања Јава не подржава?
Одговор: Јава не подржава вишеструко наслеђивање јер може створити проблеме у апликацијама попут проблема са дијамантом. Јава такође не подржава хибридно наслеђивање, јер је комбинација једног или више типова наследства и на крају може да се претвори у вишеструко наслеђивање.
П # 2) Који од чланова класе се може наследити?
Одговор: Класа може наследити јавне и заштићене чланове своје основне класе, али не може приступити приватним члановима основне класе.
П # 3) Зашто вишеструко наслеђивање није дозвољено?
Одговор: Вишеструко наслеђивање резултира двосмисленошћу када двородитељске класе имају методе са истим прототипом. У овом случају, изведена класа суочава се са двосмисленошћу у погледу од тога која основна класа треба да наследи методу.
Вишеструко наслеђивање може такође довести до проблема са дијамантима на Јави. Стога Јава не подржава вишеструко наслеђивање.
П # 4) Зашто вам је потребно вишеструко наслеђивање?
Одговор: Језици попут Јава и Ц # намећу вишеструко наслеђивање користећи више интерфејса. Дакле, када треба да наследимо функције са више од једног интерфејса, тада нам треба вишеструко наслеђивање.
П # 5) Која је главна употреба вишеразинског наслеђивања?
Одговор: За класу изведену из друге класе која је заузврат изведена из треће класе каже се да показује наслеђивање у више нивоа. Нивои у овом типу наслеђивања могу се проширити на било који број уколико задржавају јасноћу и једноставност.
Можемо да прикажемо различите нивое врста користећи наслеђивање на више нивоа. Са програмске тачке гледишта, када желимо да представимо различите нивое класа апликација, онда идемо на наслеђивање на више нивоа.
Питања и одговори за интервју за базу података орацле-а
Закључак
У овом упутству смо разговарали о типовима наслеђивања у Јави. Јава подржава само једно, вишеслојно и хијерархијско наслеђивање. Јава не подржава вишеструко и хибридно наслеђивање. Разговарали смо о двосмислености вишеструког наслеђа и дијамантском проблему у Јави.
Затим смо разговарали о разним правилима која бисмо требали следити док имплементирамо наслеђивање у Јави. Овим смо завршили дискусију о односу ИС-А на Јави.
=> Овде припазите на једноставну серију Јава тренинга.
Препоручено читање
- Шта је наслеђивање у Јави - Водич са примерима
- Наслеђивање у Ц ++
- Врсте наслеђивања у Ц ++
- Основе Јава-а: Јава синтакса, Јава Цласс и основни Јава концепти
- Јава Интегер и Јава БигИнтегер класа са примерима
- Врсте часова у Јави: сажетак, конкретно, завршно, статично
- Јава променљиве и њихови типови са примерима
- Водич за класу Јава Сцаннер са примерима