zoukankan      html  css  js  c++  java
  • C#抽象类和虚方法

    抽象类与抽象方法:
    1.使用关键字abstract修饰的类,称为抽象类.
    2.抽象类只是用到一个类所具有的行为,不能单独通过创建对象来使用.使用new是错误的.
    3.抽象类中可以有抽象方法,也可以没有任何抽象方法.
    4.抽象类不能是静态的(static)或者密封的(sealed)

    抽象方法的概念与使用要点:
    1.在抽象类中使用abstract修饰的方法,称为抽象方法.
    2.抽象方法必须在抽象类中定义,不能再普通类中使用.
    3.抽象方法只能是一个方法的申明,不能有任何的方法体.
    4.抽象方法仅仅表示一个应该具有的行为,具体实现由子类实现.
    5.抽象方法在子类中被实现(重写)必须使用关键字override.
    6.子类必须重写父类的所有抽象方法,除非子类本身也是抽象类.


    多态:
    不同对象,接收相同消息,产生不同的行为,称为多态。

    使用继承实现多态:
    父类中必须有抽象方法或虚方法.
    子类必须重写父类中的抽象方法或虚方法.
    子类对象必须转换成父类对象去使用.

    LSP:李氏替换原则:
    1.子类的对象能够替换其父类.
    2.父类对象不能替换子类.
    3.父类的方法都要在子类中实现或者重写.

    is与as操作符:
    is,检查对象是否与指定类型兼容,如果转换失败程序中断.
    as 用于在兼容的引用类型之间执行转换,转换失败返回null.

    抽象方法仅仅是声明,没有任何实现内容。
    抽象方法必须在子类中重写以后才有使用价值.

    针对抽象方法问题引出:
    如果需要在父类中提供一个方法,该方法有自己的方法体,子类根据自己的需求决定是否重写该方法,而不是必须重写.

    父类方法定义成:virtual,子类可以重写也可以不重写.
    虚方法如同抽象方法一样,可以实现多态.
    子类没有重写虚方法时,直接调用父类的虚方法.

    构造方法,用来对象创建过程中初始化。

    Equals默认支持的是引用相等,想让对象相同,重写Equals

    虚方法和抽象方法
    用virtural修饰,要有方法体,哪怕是一个分号,可以被子类override,除了密封类都可以写
    用abstract修饰,不允许有方法体,必须被子类override,只能在抽象类中.

    关于Equals()虚方法:
    对于字符串和值类型能够自动比较是否相等.
    对于对象比较必须重写后才有意义.

    关于ToString()虚方法:
    默认返回该对象的完全限定类型名称,可根据需要重写.
    而对于值类型,因为重写的该方法,则返回变量值的字符串表示.

  • 相关阅读:
    【洛谷5304】[GXOI/ZOI2019] 旅行者(二进制分组+最短路)
    【LOJ6485】LJJ 学二项式定理(单位根反演)
    【CF932E】Team Work(第二类斯特林数简单题)
    【CF960G】Bandit Blues(第一类斯特林数)
    【洛谷4689】[Ynoi2016] 这是我自己的发明(莫队)
    【洛谷5355】[Ynoi2017] 由乃的玉米田(莫队+bitset)
    【洛谷5268】[SNOI2017] 一个简单的询问(莫队)
    【洛谷4688】[Ynoi2016] 掉进兔子洞(莫队+bitset)
    【洛谷3653】小清新数学题(数论)
    【洛谷6626】[省选联考 2020 B 卷] 消息传递(点分治基础题)
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/12687999.html
Copyright © 2011-2022 走看看