[c#教程第八版]C#教程第八课:类的继承

更新时间:2019-08-05 来源:应用教程 点击:

【www.hzclsc.cn--应用教程】

本节课将介绍C#中的继承,其目的如下:
1.基类的实现

2.类的继承

3.在派生类中初始化基类

4.如何调用基类成员

5.如何覆盖基类成员

继承是面向对象程序设计的主要特征之一,它可以让你重用代码,可以节省程序设计的时间。





1.清单8-1 继承: BaseClass.cs




using System;
public class ParentClass
{
public ParentClass()
{
Console.WriteLine("Parent Constructor.");
}
public void print()
{
Console.WriteLine("I"m a Parent Class.");
}
}

public class ChildClass : ParentClass
{
public ChildClass()
{
Console.WriteLine("Child Constructor.");
}
public static void Main()
{
ChildClass child = new ChildClass();
child.print();
}
}
Output:





Parent Constructor.
Child Constructor.
I"m a Parent Class.




说明
清单8-1演示了两个类的用法。上面的一个类名为ParentClass, main函数中用到的类名为ChildClass。要做的是创建一个使用父类ParentClass现有代码的子类ChildClass。

1.首先必须说明ParentClass是ChildClass的基类。

这是通过在ChildClass类中作出如下说明来完成的:"public class ChildClass : ParentClass"。在派生类标识符后面,用分号":" 来表明后面的标识符是基类。C#仅支持单一继承。因此,你只能指定一个基类。

2.ChildClass的功能几乎等同于ParentClass。

因此,也可以说ChildClass "就是" ParentClass。在ChildClass 的Main()方法中,调用print() 方法的结果,就验证这一点。该子类并没有自己的print()方法,它使用了ParentClass中的 print()方法。在输出结果中的第三行可以得到验证。

3.基类在派生类初始化之前自动进行初始化。

注意到清单8-1的输出结果。ParentClass 类的构造函数在ChildClass的构造函数之前执行。





2.清单 8-2. 派生类同基类进行通信: BaseTalk.cs




using System;
public class Parent
{
string parentString;
public Parent()
{
Console.WriteLine("Parent Constructor.");
}
public Parent(string myString)
{
parentString = myString;
Console.WriteLine(parentString);
}
public void print()
{
Console.WriteLine("I"m a Parent Class.");
}
}

public class Child : Parent
{
public Child() : base("From Derived")
{
Console.WriteLine("Child Constructor.");
}
public void print()
{
base.print();
Console.WriteLine("I"m a Child Class.");
}

public static void Main()
{
Child child = new Child();
child.print();
((Parent)child).print();
}
}
Output:





From Derived
Child Constructor.
I"m a Parent Class.
I"m a Child Class.
I"m a Parent Class.





说明
1.派生类在初始化的过程中可以同基类进行通信。

清单8-2演示了在子类的构造函数定义中是如何实现同基类通信的。分号":"和关键字base用来调用带有相应参数的基类的构造函数。输出结果中,第一行表明:基类的构造函数最先被调用,其实在参数是字符串"From Derived"。

2.有时,对于基类已有定义的方法,打算重新定义自己的实现。

Child类可以自己重新定义print()方法的实现。Child的print()方法覆盖了Parent中的 print 方法。结果是:除非经过特别指明,Parent类中的print方法不会被调用。

3.在Child类的 print() 方法中,我们特别指明:调用的是Parent类中的 print() 方法。

方法名前面为"base",一旦使用"base"关键字之后,你就可以访问基类的具有公有或者保护权限的成员。 Child类中的print()方法的执行结果出现上面的第三行和第四行。

4.访问基类成员的另外一种方法是:通过显式类型转换。

在Child类的Main()方法中的最后一条语句就是这么做的。记住:派生类是其基类的特例。这个事实告诉我们:可以在派生类中进行数据类型的转换,使其成为基类的一个实例。清单8-2的最后一行实际上执行了Parent类中的 print()方法。

小结
你已经了解了如何创建一个派生类及其基类。你可以对基类成员进行初始化,以及如何对方法进行隐式或者显式的调用。你也了解了派生类是其基类的一个特例。





本文来源:http://www.hzclsc.cn/anzhuo/20408.html

为您推荐

支付宝怎么自动还信用卡还款_支付宝怎么自动还信用卡 支付宝设置信用卡自动还款教程

支付宝可以对信用卡还款进行管理,有些办了信用卡的童鞋,还不知道支付宝怎么自动还信用卡,通过设置我们可以实现支付宝信用卡自动还款,省时省力,下面带来设置详细教程。支付宝怎么自动还信用卡? 进入支付宝,点教你一招

2020-12-14 07:03:59   支付宝可以自动还信用卡吗   支付宝如何自动还款信用卡   支付宝怎么自动还款信用卡  

【炼金与魔法按键怎么用】炼金与魔法按键怎么操作 炼金与魔法按键操作方法介绍

炼金与魔法是一款国产沙盒游戏,游戏的操作并不难,但是游戏中没有独立的按键使用教程,很多玩家不清楚如何操作,下面为大家带来炼金与魔法按键操作方法介绍。炼金与魔法按键操作方法介绍独立游戏

2020-12-13 23:04:59  

【王冠之心怎么样】王冠之心怎么联机 王冠之心联机教程

王冠之心(Heart of Crown PC)是一款卡牌策略类型的游戏,那么玩家该怎么联机进行游戏呢?下面就来分享一下王冠之心联机教程。王冠之心联机教程准备工作,把skip open port che策略与战棋

2020-12-13 07:06:08   王冠怎么折   手工王冠怎么做   银色王冠怎么用  

网易白金卡潮玩版|网易白金卡是什么 网易白金卡怎么激活

网易白金卡是什么?网易与中国联通联合推出了手机号码品牌网易白金卡,让用户可以免流量使用网易全系应用。现在炉石传说已经加入白金卡免流套餐!下面就一起来看看网易白金卡怎么激活吧。什么是网易白金卡网易白金卡游戏资讯

2020-12-12 11:04:25   网易白金卡免流范围   网易白金卡官网  

中国快递|中国快充标准详细介绍 中国手机快充技术介绍一览

手机快充技术发展已经有几年了,各家厂商的技术也不一样,在泰尔论坛2017快充技术标准与应用研讨会上,带来了中国首部快充标准《通信终端快速充电技术要求和测试方法》,下面一起来看下中国快充标准详细介绍!2知识加油站

2020-12-12 11:04:25   中国快递协会   中国快递公司排行榜   中国快餐连锁50强品牌