c#---多态

news/2024/10/22 13:29:38/

在 C#语言中体现多态有三种方式:虚方法,抽象类, 接口


一、虚方法

  1. 什么是虚方法
    在父类中使用 virtual 关键字修饰的方法, 就是虚方法。在子类中可以使用 override 关键字对该虚方法进行重写。
class Animal
{public virtual void Speak(){Console.WriteLine("***********");}
}class Dog:Animal
{public override void Speak(){base.Speak();Console.WriteLine("汪汪汪");}public void Type(){Console.WriteLine("我是一只狗");}
}class Cat : Animal
{public override void Speak(){base.Speak();Console.WriteLine("喵喵喵");}public void Type(){Console.WriteLine("我是一只猫");}
}
  1. 何为里氏转换
    ①子类对象可以直接赋值给父类
Cat cat = new Cat();
Animal ann = cat;
cat.Speak();
cat.Type();
ann.Speak();
//报错,无法执行,ann.Type();

②如果父类中装的是子类对象,那么可以将该父类强制转为子类对象

Animal ani = new Dog();
ani.Speak();
//报错,无法执行,ani.Type();
Dog dog = (Dog)ani;
dog.Type();

③这里我们用的是强制类型转换,也可以使用is 和 as 转换

is: 如果转换成功, 返回 true, 失败返回 false;
as: 如果转换成功, 返回对应的对象, 失败返回 null

Animal ani = new Dog();
if(ani is Dog)
{Dog dog = ani as Dog;dog.Type();
}else if (ani is Cat)
{Cat cat = ani as Cat;cat.Type();
}

二、抽象方法

  1. 抽象方法的返回值类型前用关键字abstract修饰,且无方法体。

public abstract void Hello();

  1. 抽象方法必须存在于抽象类中。

abstract class Animal

在定义类的关键字class前面加 abstract 修饰的类就是抽象类。
子类继承抽象类,使用 override 关键字重写父类中所有的抽象方法

  1. 抽象类中不一定要有抽象方法, 但是抽象方法必须存在于抽象类中。
    抽象类不能被实例化, 因为抽象类中有抽象方法(无方法体)。

三、接口语法

  1. 抽象类到接口,当抽象类中所有的方法都是抽象方法的时候,这个时候可以把这个抽象类用另外,一种形式来表现,这种形式叫接口。

  2. 接口使用 interface 关键字定义,没有 class 关键字,接口名一般使用 “IXxxx”

  3. 接口中定义的方法不能有方法体,全是抽象方法,但又不需要用 abstract 修饰;

  4. 接口中的成员不允许添加访问修饰符,默认都是 public;

一个类可以实现多个接口,被实现的多个接口之间用逗号分隔开。
一个接口可以继承多个接口, 接口之间也要用逗号分隔。
类与类之间只能单继承。


http://www.ppmy.cn/news/1459465.html

相关文章

Ubuntu24.04安装中文输入法

Ubuntu24.04安装中文输入法 为了更好的体验,请访问个人博客 www.huerpu.cc:7000 一、添加中文语言支持 在安装中文输入法之前,首选要添加中文语言支持。选择System,点击Region & Language。 点击Manage Install Languages。 点击Insta…

uniapp日期区间选择器

uniapp日期区间选择器 在 uniapp 中创建一个简单的自定义日期范围的日期区间选择器: - 限制有效日期范围开始日期为 2024-01-01,结束日期为当日; - 默认日期区间为当日向前计算的7日区间; - 选择开始时间后,判断不可大…

(三)Appdesigner-界面转换及数据导入和保存

提示:文章为系列文章,可以在对应学习专栏里面进行学习。对应资源已上传 目录 前言 一、Appdesigner是什么? 二、界面切换 三、数据导入及保存 (一)数据导入 (二)数据保存 总结 前言 Appd…

FPGA火在哪里?(从商业和专业角度分析)

#前言: 通信领域可分细支众多,在通信过程中总会用到各种各样的协议,而根据通信的对象不同,协议不同,实现方法不同。但大致可分为两类硬件通信和软件通信。从事务逻辑发展角度来说,通信是结果,不…

ABB机器人计时器Clock的使用

ABB指令中有数据类型Clock。Clock用于时间测量,一个功能类似秒表的时钟,用于定时。单位为秒。 和Clock相关的指令有:ClkReset、ClkStart、ClkStop、ClkRead。 例: VAR clock clock1;声明一个时钟clock1 VAR num ti…

WEB基础---反射

什么是反射 相对官方解释 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力; 在运行时期,动态地去获取类中的信息(类的信息,方法信息,构造器信息,字段等信息); 在运行的时候获取到的类信息 封装一个字节码对象…

【Unity AR开发系列】介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用

预告 Unity开发AR系列 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 更新 二、使用插件一键安装HybridCLR和ARCore 三、配置带HybridCLR的ARCore开发环境

火山引擎数据飞轮携手美宜佳 探索拓店营销新思路

在刚刚过去的 3 月,美宜佳又交出了门店增长的高分答卷。 最新数据显示,美宜佳在全国的连锁店数已经超过 35000 家,每年净增 3000-4000 家店,月均服务顾客超 2 亿人次;同时,在中国连锁经营协会(CCFA)近日发布…