C#中抽象类与抽象方法的详解

前言:在上一篇博文关于重写的前提说明中提到了,那么今天我们一起来看看抽象类以及抽象方法…,首先我们顺着目录从抽象类的介绍开始学习:

一.抽象类:

抽象类:往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,在面向对象的C#编程语言中,通常用abstract来进行声明它是一个抽象类;

1.声明形式(创建抽象类):

 访问修饰符 abstract class abstract_name{}

举例,我们创建一个父类,它拥有一个方法:

 abstract class Father//抽象类关键字abstract
    {
        public void Run()
        {
            Console.WriteLine("我是抽象类我会跑,也会跳");
        }
     }

谨记:在抽象方法声明中不能使用staticvirtual修饰符!!!
原因请看图:
在这里插入图片描述
在这里插入图片描述

2.抽象类的调用:

 abstract class Father//抽象类关键字abstract
    {
        public void Run()
        {
            Console.WriteLine("我是抽象的父类我会跑,也会跳");
        }
     }
     class Son:Father//继承抽象类
    {}
    class Program
    {
        static void Main(string[] args)
        {
        Son son = new Son();
        son.Run();
        Console.ReadLine();
       }
     }

运行结果:
在这里插入图片描述
也许会有小伙伴会疑惑为什么不去实例化这个名为"Father"的抽象类呢?下面我们来说说抽象类的规则:

二.抽象类的规则:

1. 不能创建一个抽象类的实例:

 Father father = new Father();

如果我们这样写是错误的,为什么呢,来看看:
在这里插入图片描述
2. 不能在一个抽象类外部声明一个抽象方法:
在这里插入图片描述
3.不能用sealed关键字来修饰抽象类:
通过在类定义前面放置关键字 sealed,可以将类声明为密封类。当一个类被声明为 sealed 时,它不能被继承。抽象类不能被声明为 sealed。不能用 sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承:
在这里插入图片描述
4.抽象类中可以声明正常函数:
在这里插入图片描述

三.抽象方法:

抽象方法只允许在抽象类中进行声明!
举例:

 abstract class Father//抽象类关键字abstract
    {
      public abstract  int Abb();//方法
    }

在抽象类中进行声明后,必须在子类的继承中进行override,否则就会报错!!,同理属性也是如此!!
在这里插入图片描述

四.应用举例:

完整举例代码:

 abstract class Father//抽象类关键字abstract
    {
        public void Run()
        {
            Console.WriteLine("我是抽象的父类我会跑,也会跳");
        }
        public abstract  int Abb();//方法
        public abstract int  SS{ get; }//属性
    }
     class Son :Father
    {
        public override int SS
        {
            get { return 1; }
        }
         public void Jump(int a)
        {
            Console.WriteLine("我是第{0}个子类",a);
        }
        public override int Abb()
        {
            Console.WriteLine("我是第{0}抽象方法",SS);
            return (1);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
           Son son = new Son();
            son.Run();
            son.Abb();
            son.Jump(1);
            Console.ReadLine();
         }
     }

运行结果:
在这里插入图片描述

五.抽象类的运用意义;

在面向对象方法中,抽象类主要用来进行类型隐藏。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类;

六.总结:

1. 抽象类中的抽象属性和抽象方法必须是公有的,因此必须有public修饰符;
2. 子类必须override抽象类中的所有抽象属性和抽象方法,如果没有全部override,那么子类必须是抽象类;
3. 抽象类中可以有非抽象属性和非抽象方法,也可以是私有或者公有,但是如果是私有的话子类就不能访问,无意义,所以一般情况下都设置为公有public访问修饰符;
4. 有抽象方法或抽象属性的类一定是抽象类,抽象类中的属性或方法不一定都是抽象的;
5. 对抽象类不能使用new关键字,也不能被密封,原因是抽象类不能被实例化,不能被密封,因为抽象类要求对类进行继承;
6. 抽象类应主要用于关系密切的对象;
7.从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现;

猜你喜欢

转载自blog.csdn.net/qq_45096273/article/details/106783004
今日推荐