Наследство е централна концепция в обектно-ориентираното програмиране (OOP) и често се разглежда като един от компонентите за повишаване на ефективността. В този урок ще задълбочиш разбирането си за наследството в Java. Ще научиш как да работиш с модификатори на достъпа, да използваш конструктори и каква роля играе капсулацията в наследството.
Най-важни открития
- Наследството позволява наследяване на свойства и методи от клас.
- Модификаторът на достъпа private ограничава достъпа до променливите или методите, докато protected позволява разширен достъп в класове, които наследяват от оригиналния клас.
- Конструкторите трябва да бъдат извикани в подклас, за да се инстанцират обекти коректно.
- Методите на интерфейса могат да бъдат обобщени, когато имаш няколко специфични класа.
Стъпка по стъпка ръководство
Модификатори на достъпа: protected vs. private
Ако декларираш променлива (напр. цвят) в клас като protected, можеш да използваш тази променлива директно в наследен клас (напр. кола). Но ако декларираш променливата като private, в подклас няма да можеш да получиш директен достъп до нея.

Това означава, че достъпът до private-променливи е възможен само чрез Setter и Getter методи.
Примерът показва, че трябва да използваме setFarbe и getFarbe, за да получим достъп до private променливата farbe.

Ако променливата е декларирана като protected, можеш лесно да получиш достъп до нея в класата кола и да промениш стойността.
Използване на конструктори в наследството
При определяне на подклас, трябва да се увериш, че конструкторът на суперкласа е извикан коректно.

Това гарантира, че цветът е правилно инициализиран при създаването на обект на кола.

Увери се, че в подклас определяш конструктор, който прехвърля параметрите на суперклас адекватно.
Наследяване и извиквания на методи
Два класа, превозно средство и кола, ти позволяват да използваш общи променливи и методи. Когато дефинираш метод в превозно средство, можеш да използваш този метод и в кола, без да го пишеш отново.

Тук се извиква методът fahrzeugFarbeAusgeben и извежда стойността на цвета, предоставена чрез метода getFarbe.
Ограничения при достъпа до методи
Ако опиташ да извикаш метод в подклас, който не е наличен за този клас, ще получиш компилационна грешка. В нашия пример, трябва да предадеш обект от превозно средство, за да извикаш метода getFarbe.

Практически това означава, че трябва да се увериш, че методът съответства на твоя тип данни, преди да го извикаш. Можеш да предадеш велосипед, кола или и двете на метод, който просто очаква обекти от превозни средства.
Пример за извикване на инстанционни методи в статични контексти
Обърни внимание, че в статични методи (static) ключовата дума this не може да бъде използвана, тъй като не се отнася до конкретна инстанция. В такива случаи може да е необходимо да използваш друг метод или да преструктурираш логиката.

С това извикване ще бъде коректно изведеният цветът за обекта meinAuto.
Резюме - Наследство в Java: Ръководство за начинаещи
Наследството е важна концепция в програмирането с Java, която ти помага да модуларизираш и повторно използваш кода. В този урок научи основите на модификаторите на достъпа, конструкторите и извикванията на методи във връзка с наследството.
Често задавани въпроси
Как мога да получа достъп до private променливи в подклас?Не можеш да получиш директен достъп до private променливи в подклас. Използвай методи Getter и Setter.
Каква е разликата между protected и private?protected позволява достъп в подклас и в същия пакет, докато private е достъпен само в собствения клас.
Трябва ли да дефинирам конструкторите в подклас?Да, ако си променил конструктора на суперкласа, трябва също да дефинираш конструкторите в подклас съответно.
Мога ли свободно да презаписвам методи от суперкласите в подкласите?Да, можеш да презаписваш методи, които не са отбелязани с final или static, в подклас, за да имплементираш специфично поведение.