text: Ръководство за наследяване в Java
  Един от основните принципи на обектно-ориентираното програмиране - наследяването - ни позволява да използваме повторно съществуващия код или да разширим съществуващ тип.
  Просто казано, в Java клас може да наследи друг клас и множество интерфейси, докато интерфейсът може да наследи други интерфейси.
  В тази статия ще започнем с необходимостта от наследяване, като преминем към начина, по който наследяването работи с класове и интерфейси.
  След това ще разгледаме как имената на променливите / методите и модификаторите на достъпа влияят върху наследените членове.
  И накрая ще видим какво означава наследяване на тип.
  2. Необходимостта от наследяване
  Представете си, че като производител на автомобили предлагате множество модели автомобили на своите клиенти. Въпреки че различните модели автомобили могат да предлагат различни функции като люк или бронирани прозорци, всички те ще включват общи компоненти и функции, като двигател и джанти.
  Има смисъл да се създаде основен дизайн и да се разшири, за да се създадат техни специализирани версии, вместо да се проектира всеки модел автомобил поотделно, от нулата.
  По подобен начин, с наследяване, можем да създадем клас с основни характеристики и поведение и да създадем неговите специализирани версии, чрез създаване на класове, които наследяват този основен клас. По същия начин интерфейсите могат да разширят съществуващите интерфейси.
  Ще забележим използването на множество термини за препращане към тип, който се наследява от друг тип, по-специално:
  базовият тип се нарича още супер или родителски тип
  производен тип се означава като разширен, под или подчинен тип
  3. Наследяване на класа
  3.1. Разширяване на клас
  Клас може да наследи друг клас и да дефинира допълнителни членове.
  Нека започнем с дефиниране на базов клас Car :
  Класът ArmoredCar може да наследи членовете на класа Car, като използва ключовата дума extends в декларацията си :
  Сега можем да кажем, че класът ArmoredCar е подклас на Car, а последният е суперклас на ArmoredCar.
  Класовете в Java поддържат единично наследяване ; на ArmoredCar класа не може да се разшири множество класове.
  Също така имайте предвид, че при липса на ключова дума extends , клас неявно наследява клас java.lang.Object .
  Клас подклас наследява нестатичните защитени и публични членове от класа суперклас. Освен това членовете с достъп по подразбиране и пакет се наследяват, ако двата класа са в един и същ пакет.
  От друга страна, частните и статичните членове на клас не се наследяват.
  3.2. Достъп до родители от детски клас
  За достъп до наследени свойства или методи можем просто да ги използваме директно:
  Имайте предвид, че не се нуждаем от препратка към суперкласа за достъп до неговите членове.
  4. Наследяване на интерфейса
  4.1. Внедряване на множество интерфейси
  Въпреки че класовете могат да наследят само един клас, те могат да реализират множество интерфейси.
  Представете си, че ArmoredCar , който дефинирахме в предходния раздел, е необходим за супер шпионин. Така че компанията за производство на автомобили е помислила да добави летяща и плаваща функционалност:
  В горния пример забелязваме използването на ключовите думи реализира за наследяване от интерфейс.
  4.2. Проблеми с множествено наследяване
  Java позволява множествено наследяване с помощта на интерфейси.
  До Java 7 това не беше проблем. Интерфейсите могат да дефинират само абстрактни методи, тоест методи без никакво изпълнение. Така че, ако даден клас е реализирал множество интерфейси с един и същ подпис на метода, това не е проблем. В крайна сметка внедряващият клас имаше само един метод за изпълнение.
  Нека да видим как това просто уравнение се промени с въвеждането на методи по подразбиране в интерфейсите с Java 8.
  Започвайки с Java 8, интерфейсите могат да изберат да дефинират реализации по подразбиране за своите методи (интерфейсът все още може да дефинира абстрактни методи). Това означава, че ако клас реализира множество интерфейси, които дефинират методи с един и същ подпис, дъщерният клас ще наследи отделни реализации. Това звучи сложно и не е позволено.
  Java забранява наследяването на множество реализации на едни и същи методи, дефинирани в отделни интерфейси.
  Ако искаме да приложим и двата интерфейса, ще трябва да заменим метода repair () .
  Ако интерфейсите в предходните примери дефинират променливи с едно и също име, да кажем продължителност , не можем да ги осъществим, без да предшестваме името на променливата с името на интерфейса:
  В тази статия разгледахме основен аспект на езика Java - наследяването.
  Видяхме как Java поддържа единично наследяване с класове и множествено наследяване с интерфейси и обсъдихме тънкостите на това как механизмът работи в езика.