• virtual,abstract,interface的使用和区别(面向对象编程)二


    上一节我们提到了多态,那么多态的作用是什么呢?--把不同子类对象都当做父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化--体现多态最好的例子就是virtual(虚方法),abstract(抽象类),interface的使用

    virtual和abstrcat的区别:在本质上,这两个方法是没有区别的,都是实现多态的,都是实现了方法的重写,最主要的区别在于我们是否需要使用基类实例化的对象.

    比如说 现在有一个Employee类作为基类,ProjectManager类继承自Employee,这个时候我们就需要使用虚方法来实现多态了,因为我们要使用Employee创建的对象,这些对象就是普通员工对象。
    再比如说 现在有一个Person类作为基类,Student,Teacher 类继承Person,我们需要使用的是Student和Teacher创建的对象,根本不需要使用Person创建的对象,
    所以在这里Person完全可以写成抽象类。

    而接口和它们,存在了一些差异,首先接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员

    因为接口不提供实现,所以我们必须在继承接口后对其进行实现

    首先我们先来举个例子:喜鹊和老鹰都可以飞,这个飞的能力,我怎么来实现呢?我们可以在父类中添加一个飞的方法就好了

    这个时候,如果我们想要往里面加一个企鹅呢?企鹅不会飞,你也许会说,这有什么,我们可以在会飞的鸟里面添加fly方法啊

    对,这样是可以。功能完全可以实现,可是这样违背了面向对象啊开放封闭原则,下次我要在扩展一个鸟类比如猫头鹰(Owl),我还要去源代码中看下Fly的实现方式,然后在Owl中再次添加Fly方法,相同的功能,重复的代码,这样是不合理的,程序也不便于扩充

    其次,如果我们还要添加一个飞机类(Plane),我继承Bird父类,合适吗?很显然,不合适,所以我们需要一种规则,那就是接口了,喜鹊,老鹰,飞机,我都实现这个接口,那就可以飞了,而企鹅不实现这个接口,他就不能飞

    这就是接口的作用

    可以看出用接口实现多态程序的扩展性得到了大大提升,以后不管是再扩展一个蝴蝶(Butterfly),还是鸟人(Birder)创建一个类,实现这个接口,在主函数中添加该对象就可以了。
    也不需要查看源代码是如何实现的,体现了开放封闭原则

  • 相关阅读:
    roportional Rate Reduction (PRR)
    【C++11新特性】 nullptr关键字
    C++ 智能指针
    std::thread
    C++11 的 std::ref 用法
    for auto
    C++11右值引用与移动构造函数
    leetcode刷题笔记一百零六题 从中序与后序遍历序列构造二叉树
    leetcode刷题笔记一百零五题 从前序与中序遍历序列构造二叉树
    leetcode刷题笔记一百零四题 二叉树的最大深度
  • 原文地址:https://www.cnblogs.com/guyali/p/5284229.html
Copyright © 2020-2023  润新知