zoukankan      html  css  js  c++  java
  • 面向对象三剑客之—多态

    前言:只要会编程的程序猿都会背的一句话就是面向对象的三大特征是:继承、封装、多态。但是谁能深入的了解呢!今天我把关于自己了解的多态的知识给记录下来,其实我也不会,走一步算一步吧,混了好几年的菜鸟伤不起。

    1、多态的定义:

    同一操作作用于不同的对象,产生不同的效果,这就是多态。

    在C#中支持两种类型的多态性:

     (1)编译时的多态性:编译时的多态性是通过重写来实现的。对于非虚成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

     (2)运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态通过虚成员实现。

    2、虚方法的重写:

    虚方法怎么定义的,sorry,大伙翻翻书吧,但是我知道虚方法前面有个关键字,virtual,我写的知识点也是园子里大神讲的,我只是copy一下,哈哈,其实这里的虚方法重写和我们常见的重写有区别的,我们常见的重写是方法名一样,只是该面参数类型和数量的重写,这里的重写是虚方法的重写,方法前面加override关键字,之后只改变方法里面的内容。举个例子:

     1 public class AVWoman
     2     {
     3         protected string Name;
     4         public AVWoman() { }
     5         public AVWoman(string name)
     6         {
     7             this.Name = name;
     8         }
     9         public virtual string PaiAV() //注意了这是虚方法
    10         {
    11             return Name;
    12         }
    13     }
    14 
    15     public class CangJingKong : AVWoman
    16     {
    17 
    18         public CangJingKong(string name)
    19         {
    20             this.Name = name;
    21         }
    22 
    23         public override string PaiAV() //重写方法
    24         {
    25             return Name;
    26         }
    27     }
    28 
    29     public class BoDuoYeJieYi : AVWoman
    30     {
    31 
    32         public BoDuoYeJieYi(string name)
    33         {
    34             this.Name = name;
    35         }
    36 
    37         public override string PaiAV() //重写方法
    38         {
    39             return Name;
    40         }
    41     }
    42 
    43     public class Test
    44     {
    45         public static void Main()
    46         {
    47             AVWoman a = new CangJingKong("WildWar");
    48             Console.WriteLine(a.PaiAV());//输出结果为:WildWar
    49             Console.ReadLine();
    50         }
    51     }

    3、抽象方法

    抽象类和抽象方法需要加关键字abstract,子类必须实现所有的抽象方法,代码示例如下:

     1 public abstract class AVWoman//抽象类
     2     {
     3         public abstract string PaiAV(); //注意了这是抽象方法
     4     }
     5 
     6     public class CangJingKong : AVWoman
     7     {
     8         protected string Name;
     9         public CangJingKong(string name)
    10         {
    11             this.Name = name;
    12         }
    13 
    14         public override string PaiAV() //重写方法
    15         {
    16             return Name;
    17         }
    18     }
    19 
    20     public class Test
    21     {
    22         public static void Main()
    23         {
    24             AVWoman a = new CangJingKong("Tokyo-Hot");
    25             Console.WriteLine(a.PaiAV());//输出结果为:Tokyo-Hot
    26             Console.ReadLine();
    27         }
    28     }

    4、密封类和密封方法如果将某方法设为密封方法,那么它父类的该方法必须定义为虚方法,密封方法不可被派生类重写,密封方法必须是虚方法的重写,代码如下:

     1 public abstract class AVWoman//抽象类
     2     {
     3         public abstract string PaiAV(); //注意了这是抽象方法
     4     }
     5 
     6     public class CangJingKong : AVWoman
     7     {
     8         protected string Name;
     9         public CangJingKong(string name)
    10         {
    11             this.Name = name;
    12         }
    13 
    14         public sealed override string PaiAV() //密封方法
    15         {
    16             return Name;
    17         }
    18     }
  • 相关阅读:
    slice和splice的区别
    Js中获取对象的所有key值
    设置layUI的时间laydate 结束时间大于开始时间
    vscode前端常用插件推荐,搭建JQuery、Vue等开发环境
    安装vue脚手架
    es6中...是什么意思
    html转义字符换行以及回车等的使用
    10款让人惊叹的HTML5/jQuery图片动画特效
    基于GIS技术的水利一张图平台
    BIM + 3D GIS在岩溶强发育区跨海盾构隧道施工中的实践应用
  • 原文地址:https://www.cnblogs.com/xuguoming/p/3393786.html
Copyright © 2011-2022 走看看