您的位置:首页 > 编程语言 > C#

C#中简单的继承和多态

2016-08-28 17:34 260 查看
今天我们来聊一聊继承,说实话今天也是我第一次接触。

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

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

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

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();
}

}

下面我再穿插个示例:







在Main方法中调用

上面的两种遍历你看明白了么?不明白也不要紧,之后的bolg中我们还会讲解

好了,我就讲到这里吧,我也是个初学者,只是把老师讲的和自己理解的用文字表述出来了,这是对我自己的一种成长!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: