Важна концепция в обектно-ориентираното програмиране е наследяването. Той предоставя начин за обекти да се определят отношенията помежду си. Както подсказва името, един обект е в състояние да наследи характеристики от друг обект.
По-конкретно, един обект е в състояние да предаде своето състояние и поведение на децата си. За да може наследяването да работи, обектите трябва да имат общи характеристики помежду си.
в Ява, класовете могат да се вземат от други класове, които могат да бъдат взети от други и т.н. Това е така, защото те могат да наследяват функции от класа над него, чак до най-горния клас на обекта.
Пример за наследяване на Java
Да речем, че правим клас, наречен Човек, който представлява нашите физически характеристики. Това е родов клас, който би могъл да ви представи, мен или някой в света. Състоянието му следи неща като броя на краката, броя на ръцете и кръвната група. Има поведения като ядене, сън и разходка.
Човекът е добър за получаване на цялостно усещане за това, което ни прави всички еднакви, но не може например да ми каже за различията между половете. За целта ще трябва да направим два нови типа класа, наречени Мъж и Жена. Състоянието и поведението на тези два класа ще се различават един от друг по много начини, с изключение на тези, които те наследяват от Човека.
Следователно наследяването ни позволява да обхванем състоянието и поведението на родителския клас в неговото дете. Детският клас може след това да разшири състоянието и поведението, за да отразява различията, които представлява. Най-важният аспект на тази концепция, който трябва да запомните, е, че класът деца е по-специализирана версия на родителя.
Какво е суперклас?
В отношенията между два обекта, суперклас е името, дадено на класа, от който се наследява. Звучи като супер дупер клас, но не забравяйте, че това е по-общата версия. По-добрите имена, които да се използват, могат да бъдат базови или просто родителски клас.
За да вземем по-реален пример този път, бихме могли да имаме суперклас, наречен Person. Състоянието му държи името, адреса, височината и теглото на човека и има поведение като да пазарува, да прави леглото и да гледа телевизия.
Бихме могли да направим два нови класа, които наследяват от Person, наречен Student and Worker. Те са по-специализирани версии, защото макар да имат имена, адреси, да гледат телевизия и да пазаруват, те също имат характеристики, които са различни един от друг.
Работникът може да има щат, който притежава длъжност и месторабота, докато студентът може да притежава данни за област на обучение и институция за обучение.
Пример за суперклас:
Представете си, че дефинирате клас за лице:
Личност в обществена класа { }
Нов клас може да бъде създаден чрез разширяване на този клас:
Служител в обществена класа разширява Person. { }
Казват, че клас Person е суперклас на класа Служител.
Какво е подклас?
В отношенията между два обекта подклас е името, дадено на класа, който наследява от суперкласа. Въпреки че звучи малко драби, не забравяйте, че това е по-специализирана версия на суперкласа.
В предишния пример Студент и Работник са подкласовете.
Подкласовете могат също да бъдат известни като производни класове, детски класове или разширени класове.
Колко подкласове мога да имам?
Можете да имате толкова подкласове, колкото искате. Няма ограничение колко подкласове може да има суперклас. По същия начин, няма ограничение за броя на нивата на наследяване. Йерархия на класовете може да се изгради върху определена област на общо.
Всъщност, ако погледнете библиотеките на Java API, ще видите много примери за наследяване. Всеки клас в API-тата се наследява от клас, наречен java.lang. Object. Например всеки път, когато използвате обект JFrame, вие сте в края на дълъг ред за наследяване:
java.lang. Object. удължен от java.awt. Компонент. удължен от java.awt. Контейнер. удължен от java.awt. Window. удължен от java.awt. Кадър. удължен чрез javax.swing. JFrame.
В Java, когато подклас наследява от суперклас, той е известен като "разширяване" на суперкласа.
Мога ли подклас наследявам от много суперкласове?
Не. В Java, подклас може да разширява само един суперклас.
Защо да използвате наследяването?
Наследяването позволява на програмистите да използват повторно код, който вече са написали. В примера на Човешки клас не е необходимо да създаваме нови полета в класа Мъж и Жена, за да държим кръвната група, защото можем да използваме тази, наследена от класа Човек.
Друго предимство на използването на наследството е, че ни позволява да третираме подклас, сякаш това е суперклас. Например, да речем, че една програма е създала множество екземпляри на обектите Мъж и жена. Програмата може да се наложи да извика поведението на съня за всички тези обекти. Тъй като поведението на сън е поведение на Човешкия суперклас, можем да групираме всички обекти на Мъж и Жена заедно и да ги третираме, сякаш са Човешки обекти.