虚方法和抽象方法的区别,适用场合是什么?

如题所述

先说说区别:
1、虚方法必须有实现部分,抽象方法不可以有实现部分;
2、虚方法可以在派生类中重写也可以不重写,抽象方法必须在派生类中重写
3、虚方法可以在任何非密封类中声明,抽象方法只能在抽象类中声明。
4、如果类包含抽象方法,那么该类也必须为抽象的,不能实例化。

相比而言,虚方法倾向于代码复用,抽象方法更类似一种规约来约束子类必须实现某方法。

举个例子(未必恰当、只为说明问题):
比如有个基类“动物”;两个子类“狮子”、“青蛙”。
狮子捕猎:锁定目标、用牙齿和利爪抓获;
狮子说话:噢呜;
青蛙捕猎:锁定目标、用舌头抓获;
青蛙说话:呱呱;

对于捕猎,他们有共性也有区别:
所以就可以把捕猎声明为虚方法,基类里实现共性部分、各子类实现个性部分;
对于说话,完全不同,但是又必须让他们说话——否则成植物了,呵呵:
所以就可以把说话声明为抽象方法,基类只声明此方法来作为约束,强制子类实现。
温馨提示:答案为网友推荐,仅供参考
相似回答