美文网首页
关于abstract Virtua 的区别

关于abstract Virtua 的区别

作者: 派大星_5274 | 来源:发表于2019-03-12 17:55 被阅读0次

abstract (抽象方法):

只提供方法说明。必须在子类中被覆写。抽象类就是用来被继承的;

可以看成是没有实现体的虚方法;如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法;

抽象类不能有实体的。abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。

Virtual(虚方法):

没有被子类override时,调用父类方法。否则调用子类方法。

情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。

情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。

什么时候使用virtual什么时候使用abstract

a)  virtual重点是实现多态,同一个方法能做不同的事情,也就是当一个方法会有不同的操作的时候要用virtual,例如:支付方法 pay(),可能通过微信去支付、也可能通过支付宝或者其他方式去支付,这个时候定义pay()方法的时候最好是用virtual修饰。

b) 作为一个必须存在的方法的时候用abstract,比如要定义一个人类对象Class Person{}和一个鸟类对象Class Bird{},人是动物,鸟也是动物,所以一般会先定义一个共同的基类Class animal{},然后让人类和鸟类对象都继承这个基类。这个基类可以有共通的属性和方法,比如行走方法walk(),发声方法voice(),在基类中这两个方法都是不需要实现的,只需要在Person和Bird类中实现就可以了【Person和Bird类必需要实现这两个方法,这也保证了所有继承animal类的类都需要有walk()和voice()方法】,所以定义walk()和voice()方法的时候可以用abstract修饰【总结:父类中不需要去实现,比如人类和鸟类继承一个动物的类,这个类的Walk方法不需要具体实现,只需要定义一个方法就可以。】

更详细

http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html

相关文章

网友评论

      本文标题:关于abstract Virtua 的区别

      本文链接:https://www.haomeiwen.com/subject/pgnnpqtx.html