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
  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/liuzz/p/14521214.html
Copyright © 2011-2022 走看看