Я предполагаю, что под «абстракцией» вы подразумеваете объявление класса абстрактным, так что вы не можете создавать объекты этого класса без помощи подкласса. Примером может служить программа, в которой необходимо отслеживать животных в зоопарке и группировать их по типу окружающей среды. Таким образом, вы можете иметь:
publi c abstract Class Animal {}
publi c abstract Class AquaticAnimal расширяет Animal {}
publi c abstract Class LandAnimal extends Animal {}
publi c abstract Class AvianAnimal расширяет Animal {}
, и тогда вы можете иметь все виды неабстрактных, объявляемых классов, которые объединяются в ту или иную категорию, например :
publi c Class Gopher расширяет LandAnimal {}
Можно ли все это сделать с помощью некоторых идентифицирующих примитивных данных, которые являются параметром объекта? абсолютно. Вместо этого можно сделать следующие преимущества:
- Пока вы не можете создавать объекты абстрактного класса, вы можете создавать их массивы, где все объекты являются подклассами, вы можете иметь LandAnimal [], который содержит газели, львы и змеи.
- упрощена реализация методов. Я мог бы объявить метод в своем классе Animal с именем orderFood (), чтобы у каждого животного был определенный способ заказа большего количества еды. Я также могу объявить что-то вроде checkFeathers () в классе AvianAnimals, поэтому у каждого AvianAnimal должен быть метод для проверки того, как их перья можно проверять на наличие повреждений. таким образом, мне не нужно создавать интерфейс для каждой группы, которую я хочу, если они уже определены.
- вероятно, больше, но это все, что у меня в голове, может быть, у других людей будет больше.
(редактировать: пример кода все в java)