• C#虚方法和抽象方法区别


    虚方法:

    1、virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑。
    2、virtual方法可以直接使用,和普通方法一样。
    3、不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写。
    virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别
    相应的
    sealed关键字标示此方法不可以被重写

    抽象方法:

    1、抽象方法没有提供实现部分。

    2、抽象方法只能在抽象类中声明。

    3、抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。

    上代码:

     1     protected void Button1_Click(object sender, EventArgs e)
     2         {
     3             BasketBallPlayer basketplayer = new BasketBallPlayer();
     4             basketplayer.Name = "姚明";
     5             Response.Write(basketplayer.getName());
     6             Response.Write(basketplayer.getWeight());
     7             Response.Write(basketplayer.getSpecial());
     8 
     9             Response.Write("<br>");
    10 
    11             Player player = new BasketBallPlayer();
    12             player.Name = "王飞人";
    13             Response.Write(player.getName());
    14             Response.Write(player.getWeight());
    15             Response.Write(player.getSpecial());
    16 
    17         }
    18     }
    19 
    20     /// <summary>
    21     /// 抽象类动物
    22     /// </summary>
    23     public abstract class Player
    24     {
    25         /// <summary>
    26         /// 运动员名字
    27         /// </summary>
    28         public string Name;
    29         /// <summary>
    30         /// 虚方法,获取名字
    31         /// </summary>
    32         public virtual string getName()
    33         {
    34             return "我是运动员,我的名字叫:" + Name + "<br>";
    35         }
    36         /// <summary>
    37         /// 虚方法,获取运动员体重
    38         /// </summary>
    39         public virtual string getWeight()
    40         {
    41             return "运动员体重50公斤<br>";
    42         }
    43         /// <summary>
    44         /// 抽象方法,获取运动员专长
    45         /// </summary>
    46         /// <returns></returns>
    47         public abstract string getSpecial();
    48     }
    49     /// <summary>
    50     /// 运动员的派生类
    51     /// </summary>
    52     public class BasketBallPlayer : Player
    53     {
    54         /// <summary>
    55         /// 重写虚方法override
    56         /// </summary>
    57         public override string getName()
    58         {
    59             return "我是篮球巨星:" + Name + "<br>";
    60         }
    61         /// <summary>
    62         /// 不用override,可以不写new,但会引起警告错误,编译时系统会自动为它加上new关键字
    63         /// </summary>
    64         public new string getWeight()
    65         {
    66             return "篮球巨星体重100公斤<br>";
    67         }
    68         public override string getSpecial()
    69         {
    70             return "投篮准<br>";
    71         }
    72     }
  • 相关阅读:
    【学习总结】iOS 的机制
    【刷题】面筋-游戏测试-对二次元游戏的认识
    【JAVA】Mac下查看已安装的jdk版本及其安装目录
    【JAVA】MacBook安装Java环境及eclipse
    【学习总结】哈希表:哈希函数构造;哈希表解决地址冲突的方法
    【刷题】面筋-JAVA-hashmap和hashtable
    【刷题】面筋-测开-软件测试的生命周期
    【学习总结】jupyter notebook中以Markdown格式显示文字信息
    【学习总结】n & (n-1)
    【学习总结】IOS系统和Android系统的区别
  • 原文地址:https://www.cnblogs.com/lijianhong90/p/4075015.html
Copyright © 2020-2023  润新知