zoukankan      html  css  js  c++  java
  • 第13节、C#抽象类和抽象方法

    抽象类

    简述:抽象类和抽象方法的好处是实现多态,最简单的一个作用是实现模板,方便调用和重写及扩展性。

    1、定义抽象类

    具体语法格式如下

    访问修饰符 abstract class 类名:基类/接口
    {
     处理语句块;
    }
    

      抽象类特点

    1. 抽象类不能被直接实例化,并且在使用new 运算符时会导致编译错误。
    2. 允许抽象类包含抽象成员
    3. 抽象类不能被密封(抽象成员不能私有)
    4. 抽象类派生一个非抽象类时,需要在非抽象鳄梨中重写抽象方法,以便实现特定功能。
    5. 通过关键字abstract定义的类称为抽象类

    具体实现看上篇多态的抽象类部分

    2、抽象方法

    简述:声明抽象方法时需要注意:抽象方法必须声明在抽象类中,声明抽象方法时,不需要使用virtual、static、private修饰。在抽象类中的抽象方法不提实现,没有方法体。

    抽象方法特点

    1. 一个抽象方法可以看作是一个虚函数
    2. 抽象方法的声明只能在抽象类中
    3. 抽象方法声明只提供一个无实现的方式,没有方法体
    4. 抽象方法体的实现被覆盖方法提供、覆写方法是一个非抽象方法的成员
    5. 抽象实现的行为和抽象方法相似
    6. 在一个静态属性中使用abstract是一个错误

    具体实现看上篇多态的抽象类部分

    示例:抽象类和抽象方法

     完整代码如下:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 
      7 namespace ConsoleApplication1
      8 {
      9    public class 面向对象设计_小狗和企鹅
     10     {
     11        /// <summary>
     12        /// Main方法,程序执行入口
     13        /// </summary>
     14        /// <param name="age"></param>
     15        public static void Main(string[] age)
     16        {
     17            Dog dog = new Dog("旺财", 90, 100, StrainEnum.聪明的布拉达多);
     18            dog.GetPint();
     19            Penguin pen = new Penguin("小企", 80, 80, SexEnum.Q仔);
     20            pen.GetPint();
     21            Console.ReadLine();
     22 
     23            //Dog dog = new Dog();
     24            //dog.GetPint();
     25            //Penguin pen = new Penguin();
     26            //pen.GetPint();
     27            //Console.ReadLine();
     28 
     29            //抽象类[] Classs = {
     30            //                   new Dog("旺财", 90, 100, StrainEnum.聪明的布拉达多),
     31            //                   new Penguin("小企", 80, 80, SexEnum.Q仔)
     32            //               };
     33 
     34            //foreach (抽象类 Cls in Classs)
     35            //{
     36            //    Cls.GetPint();
     37            //}
     38            //Console.ReadLine();
     39        }
     40 
     41        /// <summary>
     42        /// 抽象类
     43        /// </summary>
     44        public abstract class 抽象类
     45        {
     46            /// <summary>
     47            /// 字段
     48            /// </summary>
     49            public string name;
     50            public int health;
     51            public int love;
     52            
     53            /// <summary>
     54            /// 属性
     55            /// </summary>
     56            public string Name
     57            {
     58                get{return name;}
     59                set{name=value;}
     60            }
     61            public int Health
     62            {
     63                get{return health;}
     64                set{health=value;}
     65            }
     66             public int Love
     67            {
     68                get{return love;}
     69                set{love=value;}
     70            }
     71            /// <summary>
     72            /// 带参构造函数
     73            /// </summary>
     74            /// <param name="name"></param>
     75            /// <param name="health"></param>
     76            /// <param name="love"></param>
     77            public 抽象类(string name,int health,int love)
     78            {
     79                this.name=name;
     80                this.health=health;
     81                this.love=love;
     82            }
     83            public 抽象类()
     84            {
     85            }
     86            /// <summary>
     87            /// 抽象方法
     88            /// </summary>
     89            public abstract void GetPint();
     90        }
     91 
     92        /// <summary>
     93        /// 小狗
     94        /// </summary>
     95        public class Dog:抽象类
     96        {
     97            public StrainEnum strain;
     98            public StrainEnum Strain
     99            {
    100                get{return strain;}
    101                set{strain=value;}
    102            }
    103            /// <summary>
    104            /// 狗狗构造函数
    105            /// </summary>
    106            public Dog()
    107            { }
    108            public Dog(string name,int health,int love,StrainEnum strain):base(name,health,love)
    109            {
    110                this.strain=strain;
    111            }
    112 
    113            public override void GetPint()
    114            {
    115                Console.WriteLine("昵称:{0},品种:{1},健康值:{2},亲密度:{3}",base.name,this.strain,base.health,base.love);
    116            }
    117        }
    118 
    119        /// <summary>
    120        /// 企鹅类
    121        /// </summary>
    122        public class Penguin:抽象类
    123        {
    124            public SexEnum sex;
    125            public SexEnum Sex
    126            {
    127                get{return sex;}
    128                set{sex=value;}
    129            }
    130            /// <summary>
    131            /// 企鹅构造函数
    132            /// </summary>
    133            public Penguin()
    134            { }
    135            public Penguin(string name,int health,int love,SexEnum sex):base(name,health,love)
    136            {
    137                this.sex=sex;
    138            }
    139 
    140            public override void GetPint()
    141            {
    142                Console.WriteLine("昵称:{0},性别:{1},健康值:{2},亲密度:{3}",base.name,this.sex,base.health,base.love);
    143            }
    144        }
    145 
    146        /// <summary>
    147        /// 狗品种枚举
    148        /// </summary>
    149        public enum StrainEnum
    150        {
    151            聪明的布拉达多=0,
    152            酷酷的雪娜瑞=1
    153        }
    154 
    155        /// <summary>
    156        /// 企鹅品种枚举
    157        /// </summary>
    158        public enum SexEnum
    159        {
    160            Q仔=0,
    161            Q妹=1
    162        }
    163 
    164     }
    165 }
    View Code
  • 相关阅读:
    python的性能了解
    工作记录01/17/11
    继承或者重写django的user model?
    dunder=double underscore
    ipython应该是个好的命令行式的python ide,不过现在没时间折腾。
    django的settings如何在不同环境下进行切换
    pythonic实践
    关于递归函数的简单认识
    数据结构(C语言版)链表相关操作算法的代码实现
    数据结构(C语言版)顺序栈相关算法的代码实现
  • 原文地址:https://www.cnblogs.com/liuzz/p/14521214.html
Copyright © 2011-2022 走看看