C#中简单的继承和多态

发布时间:2023年12月17日

今天我们来聊一聊继承,说实话今天也是我第一次接触。

继承的概念是什么呢?就是一个类可以继承另一个类的属性和方法(成员)

继承是面向对象编程中的一个非常重要的特性。

好了,废话不多说,下面切入正题:

1.首先我们定义一个子类,给它创建两个构造:一个无参构造和一个有参构造

? 定义一个枚举类

在定义的子类中它有自己独有的属性:

?

在定义的父类中的属性和构造:

?

在Main方法中:

同时要注意,在调用子类的带参构造时,我们要想到调用子类构造的时候,没有使用base关键字调用父类的指定的构造,默认调用父类的无参构造.

补充一下:

?? 01.base代表父类对象,如果base():调用父类的构造函数

???02.base代表的是方法调用,是不需要参数类型的

??03.base(传参顺序和父类构造一致,变量名和子类构造参数一致)

2.在这里补充一点访问修饰符

我们所知道的:public? private? protected

下面我画一个图来简单的描述一下(√表示可以,×表示不可以)

??????????????? ? 当前类???? 子类???? 其他类(Program)
?? private???????? √????????? ×??????? ×
?? protected???? √????????? √??????? ×
?? public?????????? √????????? √??????? √

总结:我们可以清晰的明白三种访问修饰符对类成员的访问限制强度:private>protected>public

?3.new 子类底层原理图

我简单的用一个图来描述一下:

用文字描述:

?? 1.走到子类构造,不进入构造体
?? 2.转向父类,进入父类构造体执行
?? 3.转回子类构造,执行子类构造体
?? 4.转到Main,内存中构建出子类对象

4.继承还具有两大特性这个我们也不要忘记了,就是单根性和传递性

? 单根性指的就是一个子类只有一个父类

? 传递性就是只要跟父类有继承关系,就可以使用父类的属性和方法

接下来我们讲一讲多态

1.多态是什么呢?字面上的意思就是多种形态

用专业一点的话来说就是指同一个操作作用于不同的对象时,可以有不同的解释,产生不同的执行效果。

我们所接触的方法重载也是多态的一种方式。

如何实现多态呢?不要急下面我来解说

(1)实现方法的重写

????? 在父类中定义的方法,用virtual关键字来定义为虚方法

???? 在子类中定义自己的方法,用override关键字来修饰,实现对父类的方法的重写

(2)定义父类变量,用子类变量初始化父类变量

是不是觉得抽象,其实我刚开始学习时也是一样的,下面来一个小案例:

//创建一个Person父类

?public class Person
??? {
?????? public?virtual?void SayHello()
?????? {

??????????? //父类特有的方法
?????????? Console.WriteLine("父类打招呼方法");
?????? }
??? }

//创建一个Korea子类

public class Korea:Person? //在这里要注意它继承于Person类
??? {
?????? public?override?void SayHello()
?????? {
?????????? Console.WriteLine("金喜善打招呼方法");
?????? }
??? }

//创建一个Chinese类

public class Chinese:Person?//在这里要注意它继承于Person类

??? {
?????? public override void SayHello()
?????? {
?????????? Console.WriteLine("你好!");
?????? }
??? }

//创建一个American类

public class American:Person???//在这里要注意它继承于Person类
??? {
??????? public?override?void SayHello()
??????? {
??????????? Console.WriteLine("Hello");
??????? }
??? }

?前面我们也学过泛型了下面我们就用泛型来存储

??????????? List<Person> list=new List<Person>();
??????????? Chinese chinese=new Chinese();
??????????? American usa=new American();
??????????? Korea korea=new Korea();

??????????? list.Add(chinese);
??????????? list.Add(usa);
??????????? list.Add(korea);

下面我们可以用foreach来遍历

方式一:

?????????? foreach (Person person in list)
??????????? {
?????????????? person.SayHello();
??????????? }

方式二:

?????????? foreach (Person person in list)
??????????? {

?????????????? //方式二:不使用统一调用
??????????????? if (person is Chinese)
??????????????? {
?????????????????? Chinese chinese= person as Chinese;
??????????????????? chinese.SayHello();
??????????????? }

?????????????? if (person is Korea)
??????????????? {
????????????????????Korea chinese= person as??Korea;
????????????????????korea.SayHello();
??????????????? }

?????????????? if (person is??American)
??????????????? {
????????????????????American chinese= person as??American;
?????????????????????american.SayHello();
??????????????? }

??????????? }

下面我再穿插个示例:

文章来源:https://blog.csdn.net/omygodvv/article/details/134993009
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。