C#中抽象类的使用和示例

C#中 抽象类 的使用和示例

今天学校在上Java课程时讲到使用abstract(抽象的)修饰符来修饰类使之成为抽象类,于是想到最近在学习c#,虽然说没讲到这块,但是既然Java老师给我提了一个醒,我不在C#这块拓展一下就感觉好像很对不起我们的老师,所以就在网上查阅了相关的资料文献,将C#中抽象类总结了下,下面我们就一起开始探讨吧!

abstract 修饰符

1、了解 abstract 是什么意思?

abstract 在英语中译为抽象的
在这里插入图片描述

2、用这个修饰符来干什么?

abstract 修饰符 修饰类名为抽象类,修饰方法为抽象方法。如果一个类为抽象类,则这个类只能是其他类的基类。抽象方法在抽象类中没有函数体,反过来说就是抽象类中的抽象方法没有方法体,直接以;分号结尾。继承抽象类的派生类必须实现抽象类的抽象方法

3、定义抽象类的目的?

​ 定义抽象类的目的说白了其实就是:抽象类提供可由其派生类共享的一般形式,就是说共享的这一部分是公共的,但是派生类不想使用,派生类可以根据自身需求,扩展(重写)抽象类中的方法。

4、抽象类的特征:

  • 抽象类不能实例化,也就说不能通过new的方法实例化
  • 抽象类只能作为基类
  • 抽象类的抽象方法是没有方法体的,继承抽象类的派生类必须实现抽象类的抽象方法、
  • 如果一个类中包含了抽象方法,那么这个类一定要声明为抽象类
  • 抽象类中的方法不一定都是抽象方法,抽象类也可以容纳具体实现的方法或者称为具体方法

5、抽象方法

  • 抽象方法是隐式的虚方法
  • 只允许在抽象类中使用抽象方法声明
  • 抽象方法声明不提供实际实现,没有方法体,声明后以( ; )分号结束,并且在签名后没有大括号{ }
  • 抽象方法一定要在派生类重写,让抽象方法成为一个实实在在的方法,如果没有重写,那么派生类也必须是抽象类
  • 抽象方法在书写时不能是私有的,也就是说不能使用private修饰符
  • 在抽象方法声明不能使用static或virtual修饰符
  • 派生类中通过使用override修饰符的声明,可以重写抽象的继承方法或属性,使之称为实实在在的方法或属性

6、解释

​ 比如说:我们要创建“狗”、“猫”、“鱼”、“马”……等这些对象,他们都有共同的一些属性,比如说嘴巴、颜色、运动、大小……等,但是他们彼此的属性又有些不同,比如说 嘴巴的形状不同吧,颜色千奇百怪吧、运动的方式不同,比如说鱼和马,一个是用腿跑,一个是用身体游。但是,在这种情况下,我们要一个个去定义各自的属性和方法?我觉得太搞笑了吧,如果说有一百种一千种动物,你要定义到何使呢。所以,在这种情况下,如果用抽象类是不是很方便给他们继承?

​ 抽象类也有更好的地方,体现在“同质异像”,也就是说实质相同,实现形式不同的方法继承上,例如狗、鱼、马等,他们呼吸的方式不同,运动的方式以及速度上不同,这个时候,用抽象类,让各自的类去实现它门是不是就显得很方便。抽象的意义就在于此:将共同的东西抽取出来封装,但不实现,只给继承。

7、例子:

//外部调用
class Program
    {
        static void Main(string[] args)
        {
            //调用的猫的方法
            Cat mao = new Cat();//实例化猫
            mao.weight(20);//猫继承了体重方法,调用体重方法
            mao.Eat();//调用猫的eat方法
            //调用狗的方法
            Dog dog1 = new Dog();//实例化狗
            dog1.weight(40);
            dog1.Eat();
            Console.WriteLine();
        }
    }
//抽象类(基类)
 abstract class Animal//抽象动物类
    {
        public int Weight { get; set; }//体重属性
        public void weight(int a)//有参无返回值的普通方法
        {
            this.Weight = a;//将获取到的只给体重属性
            Console.WriteLine("体重为:{0}", this.Weight);//打印体重
        }
        public abstract void Eat();//抽象方法吃,将猫和狗所具有的属性或方法抽取出来
     //现实开发中,先开发父类,再开发子类
    }
//派生类猫
 class Cat : Animal
    {
        public override void Eat()//猫继承了动物吃的虚方法,但是它有自己想吃的,所以就自己重写方法
        {
            Console.WriteLine("我吃鱼");
        }
    }
//派生类狗
 class Dog:Animal
    {
        public override void Eat()//狗继承了动物的虚方法,但是此时它有自己想吃的,所以就自己重写方法
        {
            Console.WriteLine("狗喜欢吃骨头");
        }
    }

8、在什么情况下使用抽象类?

​ 相信大家看了上边的解释已经差不多了解到什么时候使用抽象类,但是为了保险起见,我用通俗的一句话再给大家解释一遍,来加深记忆,

如果一个类设计的目的是用来被其他类继承的,它代表一类对象的所具有的公共属性或者方法,那么此时就应该使用抽象类。

override关键字

1、了解override是什么意思?

override在英文中译为推翻、凌驾于的意思,在后端C#中译为重写的意思,就是说覆盖
在这里插入图片描述

2、用override关键字来干什么?

override关键字提供派生类对基类方法的新的实现,重写的基类方法必须和基类方法有着相同的签名(函数名、返回值、参数列表相同)

3、override的特点

  • override关键字不可以重写基类非virtual修饰符的方法和static修饰的静态方法
  • 派生类的override方法基类的virtual方法必须有相同的访问权限,派生类不能用修饰符new、static、virtual或者abstract’修饰override方法
  • 派生类的override(重写)方法重写的基类必须是virtual(虚拟的)、abstract(抽象的)或者override(重写的)

如果本篇文章有不妥的地方,或者少总结的地方,还请各位大神能够指点迷津,来帮帮我们这些技术小白,让我们有一个质的飞跃,也希望这篇文章能够帮助到更多的朋友,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御弟謌謌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值