Теория наследования.
Наследование позволяет создавать классы на основе существующих. То есть мы повторно используем написанный один раз код. Другими словами класс может унаследоваться от существующего класса и добавить какие-то свои методы или изменить метод родительского класса. Таким образом у нас получится новый класс с дополненным функционалом родительского класса или по другому новый класс будет уметь всё, что умел родительский класс, плюс добавит что-то своё.
Наследование можно назвать расширением, так как дочерний класс расширяет родительский. Представим, что у нас есть два класса. У первого класса есть три метода. Класс 2, допустим, пустой и ни с чем не связан. Класс 2 хочет унаследоваться от класса 1. В этом случае класс 1 будет являться родительским классом или по другому «суперклассом,» а класс 2 — дочерним классом, или по другому подклассом.
Родительский класс — это класс от которого наследуют, а дочерний класс — это класс, который наследует родительский. Родительский класс по другому ещё называют базовый, дочерний класс называют производный или потомок.
После того, как мы унаследовались от класса 1 — методы класса 1 становятся доступны и во втором классе. Как будто они автоматически скопировались в программный код и теперь эти методы можно использовать и в классе 2. Нам не нужно вручную копировать эти методы из класса 1 и вставлять их в класс 2 — в этом случае идёт повторное использование кода.
Чаще всего применяется следующий вариант: класс 2 после наследования добавляет какие-то свои методы реализации, которые будут доступны также, как и наследуемые.
Можно сказать, что класс 2 расширил функционал класса 1, усовершенствовал его. Класс 2 умеет делать всё, что умел класс 1 и плюс добавил что-то своё.
Второй вариант: класс 2 наследует все методы класса 1 и переопределяет некоторые из них или даже все, и плюс добавляет какие-то свои методы.
После всех этих манипуляций у класса 2 доступны переопределённые методы 1 и 2, затем наследованный метод 3 и собственные методы 4 и 5. Таким образом происходит переопределение метода родтельского класса. По другому ещё говорят перезаписанный метод. Это значит, что класс 2 может полностью изменить поведение переопределённого метода родительского класса, а также он может просто доработать функционал родительского метода.
Также дочерний класс может наследовать не только методы, но и поля или переменные родительского класса. Ниже представлено наследование на примере модели телефона Iphone.
Когда выше первый Iphone — он имел следующие возможности: управление касанием пальца, возможность совершать звонки, отправлять смс, слушать музыку, смотреть фильмы, использовать Интернет, фотографировать и т.д. Можно сказать это методы объекта Iphone 1.
Также Iphone 1 имел свойства. Такие как размеры, материал, вес, дизайн, процессор и размер камеры в мегапикселах.
Можно сказать, что Iphone 4S является усовершенствованной моделью первого Iphone, или по другому Iphone 4s унаследовался от Iphone 1, и в новом объекте Iphone 4s были переопределены следующие методы: управление касанием пальца, изменилась работа в Интернете (удобнее, быстрее), изменился формат отображения информации на экране (Retina), изменился метод фото.
Унаследованные методы, которые не изменились в 4-й модели Iphone — звонить, писать смс, слушать музыку, смотреть фильмы. Эти методы в некотором роде являются теми же самыми методами, которые были в первом Iphone. Также в Iphone 4s были переопределены свойства: размер, материал производства, вес, боле мощный процессор, увеличился размер камеры в мп.
Были добавлены новые методы, которых не было в первом Iphone — поддержка 3G, GPS-навигация, возможность распознавания речи. Таким образом объект Iphone 4s унаследовался от первого Iphone, некоторые его методы переопределил, некоторые методы оставил без изменений, затем некоторые свойства переопределил и добавил свои собственные методы. Объект Iphone 4s расширил объект Iphone.
Также наследование объектов можно увидеть в повседневной жизни. Есть объект автомобиль — затем два дочерних объекта, которые наследуются от автомобиля. К примеру марки автомобилей Toyota и BMW. То есть они являются более специализированным объектом автомобиль.
Затем объект Toyota Имеет более детализированные объекты, такие как Camry и RAV4. Также у BMW (X5 и X6). Таким образом построилось дерево зависимости от объектов от самой верхний (автомобиль) и заканчивая конкретной моделью. Но в то же время для объекта автомобиль можно найти свой родительский объект, например транспорт. У транспорта есть свой родительский объект и так до бесконечности.
Чем выше находится объект, тем у него более общий смысл. Чем ниже находится объект, тем у него смысл более детализированный, более расширенный или усовершенствованный.