Интерфейс: Если все ваши дочерние классы должны реализовывать определенную группу методов / функций, но каждый из дочерних классов может свободно предоставлять свою собственную реализацию, используйте интерфейсы.
Например, если вы реализуете иерархию классов для транспортных средств, реализуйте интерфейс под названием Vehicle, который имеет такие свойства, как Color MaxSpeed и т. д., и такие методы, как Drive (). Все дочерние классы, такие как Car Scooter AirPlane SolarCar и т. Д., Должны быть производными от этого базового интерфейса, но обеспечивать отдельную реализацию методов и свойств, предоставляемых Vehicle.
-> Если вы хотите, чтобы ваши дочерние классы реализовывали несколько несвязанных функций в кратком виде, используйте интерфейсы с множественным наследованием.
Например, если вы реализуете класс под названием SpaceShip, который должен иметь функциональные возможности от Транспортного средства, а также от НЛО, тогда сделайте и Транспортное средство, и НЛО в качестве интерфейсов, а затем создайте класс SpaceShip, который реализует как Транспортное средство, так и НЛО.
Абстрактные классы:
-> Когда у вас есть требование, согласно которому ваш базовый класс должен обеспечивать реализацию определенных методов по умолчанию, тогда как другие методы должны быть открыты для переопределения дочерними классами, используют абстрактные классы.
Например, снова возьмем пример класса Vehicle выше. Если мы хотим, чтобы все классы, производные от Vehicle, реализовывали метод Drive () фиксированным образом, тогда как другие методы могут быть переопределены дочерними классами. В таком сценарии мы реализуем класс Vehicle как абстрактный класс с реализацией Drive, а другие методы / свойства оставляем абстрактными, чтобы их могли переопределить дочерние классы.
-> Цель абстрактного класса - предоставить общее определение базового класса, которым могут совместно пользоваться несколько производных классов.
Например, библиотека классов может определять абстрактный класс, который используется в качестве параметра для многих ее функций, и требовать от программистов, использующих эту библиотеку, предоставить свою собственную реализацию класса путем создания производного класса.
person
user3824027
schedule
19.06.2016