zoukankan      html  css  js  c++  java
  • 虚方法与抽象方法的区别

    抽象方法

    使用abstract关键字 public abstract bool Withdraw(…),没有方法体。

    抽象方法必须被派生类重写。

    任何类中,若存在抽象方法,这个类必须定义为抽象类(不过,里面可以不包含抽象方法)。

    ===============================================================================

    虚方法

    使用virtual关键字 public virtual bool Withdraw(){....}(有自己的方法体);

    是否重写——>随便你。

    虚方法有自己的方法体,可在子类中重写。重写用new关键字(放在返回类型前面),重写后调用的是新的类成员。

    虚方法重写后若要调用基类成员,需强转为基类实例。

    例如:

    DerivedClass B = new DerivedClass();
    B.DoWork();    // Calls the new method.

    BaseClass A = (BaseClass)B;
    A.DoWork();     // Calls the old method.

     

     虚函数的限制:

    1.虚方法仅适用于有继承关系的类对象。

    2.析构函数可以是虚函数。

    3.简单点说,抽象方法是需要子类去实现的;  虚方法,是已经实现了,子类可以去改写,也可以不改写取决于需求。


    C#中的虚方法使用virtual关键字定义

    public virtual void eat();

    override关键字作用是对父类的virtual方法进行改写

    public override void eat();

    虚方法,抽象方法 很多时候都用在 多态 这里!!

     

    对于多态:

    就是说 父类定义的 虚方法 ,如果有子类改写,那么 其不同子类的对象 优先调用各自的 改写方法,如果没改写,就调用父类的

     

    打个比方:

    父亲有一家公司,有良好的运营模式

    两个儿子 A B 分别开办了两个子公司。

    A 儿子的公司,没有自己的 运营模式 ,于是在公司运营的时候,就使用自己父亲的公司的 运营模式。

    B 儿子的公司,是一个 夜总会,父亲的 运营模式 就不适合了,B就改写了 一个新的 运营模式,那么就优先使用自己的 运营模式。

     

    至于抽象方法,那就好比:父亲知道公司必须要有一个 运营模式。但父亲却没有自己的公司。于是,父亲寄希望于儿子,儿子们的公司,都必须实现 当初父亲构想的 运营模式。

    我有治疗灰指甲的特效药
  • 相关阅读:
    (三) 权限控制 --《springboot与shiro整合》
    (二) shiro集成 --《springboot与shiro整合》
    (一) springboot 项目搭建 --《springboot与shiro整合》
    第四章 编码/加密(学习笔记)
    第三章 授权(学习笔记)
    第二章 身份验证(学习笔记)
    获取小程序码java实现
    paypal退款 java实现
    并发下的数据处理和优化
    Casperjs初体验
  • 原文地址:https://www.cnblogs.com/gggg/p/5865370.html
Copyright © 2011-2022 走看看