Я программист-самоучка, так я понял эти концепции? кто-то может привести пример тоже
Так что кто-то скажет мне, если я прав или нет.
Инкапсуляция - это скрытие данных, позволяющее вам только просматривать атрибуты и другие методы в классе в частном порядке, в то время как вы можете использовать эти методы и сокращения в других классах,
Наследование - это расширение класса, например, взятие некоторых методов из "суперкласса" и передача его в "дочерний класс" и его изменение или использование там.
Полиморфизм - это то же самое, что наследование, но он просто отформатирован по-разному, например, если бы у меня был класс животных, у каждого животного был свой звук, так что оттуда у меня было бы что-то вроде этого
Животный кот = новый кот ();
перегрузка и перегрузка я не уверен в этом
Абстрактные классы берут методы или переменные из суперкласса и передают эти методы и переменные как "Абстрактные", чтобы в подклассе вы их модифицировали и редактировали.
Имеет ли это смысл? Или я что то не так понял?
2 ответа
Эти вещи все работают вместе.
Объект - это нечто самодостаточное, оно отслеживает свое собственное состояние. Инкапсуляция обеспечивает это разделение, объект публикует методы, которые вызывают другие объекты, но эти методы отвечают за изменение состояния объекта.
В системах oo, использующих классы, класс является шаблоном для создания объектов. Подклассирование означает создание нового класса, который является более конкретной версией подклассового класса, где подклассовые объекты наследуют определения класса, которые определяют методы и поля суперклассов.
Абстрактные классы откладывают некоторые реализации методов, оставляя их подклассам для реализации. Если суперкласс знает, что что-то должно произойти в определенный момент, но хочет оставить именно то, что происходит на усмотрение конкретных объектов, для этого и нужны абстрактные методы.
Здесь возникает паттерн: объекты, берущие на себя ответственность, и иерархия типов от самых абстрактных / общих до самых конкретных / специфических. Полиморфизм заключается в том, что поведение объектов определяется во время выполнения программы на основе переопределенных методов. Переопределение означает, что подтип имеет более конкретную версию метода, которая заменяет версию суперкласса.
(Перегрузка otoh удобна тем, что позволяет классу иметь методы с одинаковыми именами, но разными параметрами.)
Результатом этого может стать система, которая на высоком уровне имеет дело с абстрактными типами и позволяет объектам самим обрабатывать точные детали. Идея состоит в том, что таким образом детали могут быть ограничены подклассами, и программа может быть изменена путем создания новых подклассов, не нарушая остальную часть программы. В любом случае, теоретически, смотрите "Проблема выражения Уодлера", где все это идет в ад.
И для примера: прочитайте источник, который идет с Jdk. Пакеты java.lang и java.util имеют множество классов, которые являются примерами ОО-дизайна.
Вы правы, но есть небольшая ошибка в том, как вы объяснили полиморфизм; полиморфизм НЕ "как то же самое, что наследование". Полиморфизм дает власть подклассам (или дочерним классам), позволяя передать экземпляр этого класса, когда ожидается экземпляр родительского класса. Это отличается от наследства.