Когда использовать абстрактные классы?
вот статья MSDN о абстрактные классы, но я действительно не понимаю...
когда следует использовать абстрактные классы? Каковы преимущества использования абстрактных классов?
6 ответов:
например, предположим, что вам нужно создать объекты собаки, кошки, хомяка и Рыбы. Они обладают схожими свойствами, такими как цвет, размер и количество ног, а также поведение, поэтому вы создаете суперкласс животных. Однако какого цвета животное? Сколько ног у животного объекта? В этом случае не имеет большого смысла создавать экземпляр объекта типа Animal, а только его подклассы.
абстрактные классы также имеют дополнительное преимущество в полиморфизм–позволяет использовать типа (аннотация) суперкласса в качестве аргумента метода или возвращаемого типа. Если для пример у вас был класс PetOwner с методом train() вы можете определить его как взятие объекта типа Animal например train(Animal a) в отличие от создания метода для каждого подтипа животного.
с помощью абстрактных классов, мы можем сделать класс более универсальным.
например: если класс A является абстрактным классом и существуют классы class B, class C и class D, расширяющие абстрактный класс A, то эти подклассы наследуют метод, который уже объявлен в абстрактном классе A, тем самым делая метод более общим.
вы используете их для классов, которые никогда не будут созданы (так эффективно не существуют), но вы хотите наследовать от них по причинам полиморфизма.
используйте абстрактные классы, когда вы определяете поведение для класса в вашем классе heirarchy, который никогда не будет использоваться для непосредственного создания экземпляра объекта.
CAnimal dingbat = new Animal();
Ричард привел пример, когда класс abstact имеет преимущества перед неабстрактными классами.
Я хотел бы добавить таблицу фактов для выбора между абстрактным классом и интерфейсом. Изображение можно найти здесь.