2010-03-16 3 views
6

как абстрактные, так и виртуальные будут переопределяться в классе детей, чем разница.В чем разница между абстрактным и виртуальным?

Это виртуальный метод имеет тело и абстрактный - это просто подпись ????

+0

Как и в сторону, частичные методы, в отличие от абстрактных методов, позволяют создавать методы без реализации, которые не должны быть перекрыты. – Brian

ответ

24

Это виртуальный метод имеет тело и реферат - это просто подпись ????

Точно. Дело в том, что виртуальные методы могут быть переопределены в производных классах, тогда как абстрактные методы должны быть переопределены. Аналогично, класс, который имеет хотя бы один абстрактный метод, сам должен быть абстрактным, т. Е. Он не может быть создан непосредственно, поскольку его реализация (частично) отсутствует.

И, наконец, каждый абстрактный метод также виртуальный по смыслу. virtual в основном означает, что метод отправляется во время выполнения в правильный класс и поэтому может быть переопределен для реализации полиморфизма времени выполнения.

+0

Поскольку абстрактные методы ДОЛЖНЫ быть перезаписаны, они на самом деле являются контрактами, такими как интерфейсы и код, которые будут компилироваться, если вы их не реализуете правильно, поэтому это способ заставить пользователей вашего кода реализовать код, который они должны реализовать, особенно если они ленивы , верный? – Xaisoft

+0

@Xaisoft Правильные, но виртуальные (не абстрактные) методы также образуют контракт, поскольку контракт с точки зрения использования классов (= клиентов). Все, что важно, это то, что клиент может использовать функции класса, который он рекламирует. –

+1

Я согласен, но я имел в виду, что если вы объявляете метод виртуальным, клиент не должен его реализовывать, даже если он должен. Также виртуальный метод может иметь поведение по умолчанию. Клиент должен реализовать абстрактный метод и не может иметь поведение по умолчанию. Кажется, единственная причина, по которой вы должны идти абстрактным маршрутом против виртуального маршрута, - это действительно то, что вы действительно хотели применить метод, который будет реализован, и бремя на клиента. – Xaisoft

17

Реферат означает, что вы ДОЛЖНЫ переопределить его. Виртуальный означает, что вы можете переопределить его. Более или менее.

+4

Добавление к этому: с абстрактными методами в вашем классе весь ваш класс будет абстрактным, что означает, что вы не можете создавать экземпляры этого класса, а только производные не-абстрактные подклассы. – dbemerlin

Смежные вопросы