继承是面向对象编程的一个重要特性。任何类都可以从另一个类中继承,这就是说,这个类拥有它继承的类的所有成员。在OOP 中,被继承的类称为父类(也称为基类)。注意,C#中的对象仅能直接派生于一个基类,当然基类也可以有自己的基类。

类的继承一个重要作用是子类可重用父类的代码。这样就可以在一个地方集中维护一份代码,避免了很多的重复的代码。比如我们已经有一个Car类。在这个Car中有两个最基本的方法启动发动机和停止发动机 (1)startEngine();(2)StopEngine();

class Car
{
public int StartEngine()
{
//启动发动机的代码
return ;
} public int StopEngine()
{
//停止发动机的代码
return ;
}
}

这时候我们的系统需要有两个新类,ModelACar和ModelBCar。它们都需要同样的启动发动机和停止发动机功能。除此之外,每个类还都有自己特殊的功能。如果没有继承,我们怎么办呢?很简单啊,把Car类中的这两个方法copy过来就可以了。

class ModelACar
{
public int StartEngine()
{
//启动发动机的代码
return ;
} public int StopEngine()
{
//停止发动机的代码
return ;
} public void ModelAFucntion1()
{ } public void ModelAFucntion2()
{ } } class ModelBCar
{
public int StartEngine()
{
//启动发动机的代码
return ;
} public int StopEngine()
{
//停止发动机的代码
return ;
} public void ModelBFucntion1()
{ } public void ModelBFucntion2()
{ }
}

现在问题就来了,如果有十种新的类都需要Car类中同样的启动和停止发动机的方法,那你怎么办?在十个类中都copy同样的代码吗?可以。但是很烦啊。尤其是以后修改维护的时候,更烦。少改了一个地方,就会出问题。所以继承就是来帮我们解决这样的问题。我们只需要新的类继承Car类就可以了。新的类自动就有了Car类的全部方法。

继承的语法和简单。

class 子类的名字 : 父类的名字

{

}

使用继承后,ModelACar和ModelBCar的代码变成这样了。

class ModelACar : Car
{ public void ModelAFucntion1()
{ } public void ModelAFucntion2()
{ } } class ModelBCar : Car
{ public void ModelBFucntion1()
{ } public void ModelBFucntion2()
{ }
}

但是我们同样可以在ModelACar和ModelBCar 中访问StartEngine和StopEngine方法。

在继承一个父类时,成员的可访问性就成了一个重要的问题。子类不能访问父类的私有成员,但可以访问其公共成员。不过,子类和外部的代码都可以访问公共成员。这就是说,只使用这两个可访问性,不能让一个成员可由父类类和子类访问,而不能由外部的代码访问。

为了解决这个问题,C#提供了第三种可访问性:protected,只有子类才能访问父类的protected 成员。对于外部代码来说,这个可访问性与私有成员一样:外部代码不能访问private 成员和protected 成员。

来开一个具体的例子吧。你创建一个项目。解决方案名称为Sloution24,项目名称为Exercise24,项目类型为控制台程序。

新建三个类文件,名称分别为Car,ModelACar,ModelBCar。

点击Car.cs。修改代码如下。

点击ModelACar.cs。修改代码如下。

点击ModelBCar.cs。修改代码如下。

点击Program.cs。修改代码如下。

运行结果

练习
 
  

  1. 读懂这段代码,为每条语句加上注释,解释它的功能。

  2. 新建一个ModelCCar类,让它继承Car类。在main方法中新建一个ModelCCar类的对象,调用startEngine和StopEngine方法。

  3. 修改Car类的StartEngine和StopEngine方法。例如多输出几行字符。运行程序,看看对ModelACar和ModelBCar调用StartEngine和StopEngine方法有影响吗?

  4. 修改Car类的字段和方法的public访问限制符为private。运行程序,看看是什么结果?解释一下原因是什么?

  5. 在main方法中可以调用Car类的TestEngine方法吗?为什么?怎样修改才能调用?

  6. 新建一个ModelDCar类,让它继承ModelACar类。在main方法中新建一个ModelDCar类的对象,看看都能调用什么方法。分别调用一些试试看。


付费解答C#入门学习过程中碰到的各种问题。

零基础学习C#入门,大多数的问题都可以通过自学或借助互联网解决。

但是还是会有一些问题,不是那么容易解决,成为了你学习的绊脚石。最后甚至造成你学习的半途而废。通常学习C#编程入门,你会遇到20到30多个你不能很容易解决的问题。

这个时候,你最需要什么呢?

对!一个专业的老师给你帮助!

你在学习本课程中,遇到任何问题都可以通过qq或email想本教程作者进行求助。

只需30元,你就可以得到本教程作者的三次专业解答。所以你只需不到300元就可以顺利的完成C#入门,从此推开软件行业的大门。

付费方式非常简单:

用微信扫描下面的二维码。在付款留言中留下你的qq号或email地址就可以啦。

教育不是要便宜,而是要可靠!真正聪明的人,更懂得花钱让专业的人为自己服务,提高自己的效率。

老师qq:2040227296

老师email:2040227296@qq.com

25 C#类的继承的更多相关文章

  1. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  2. JavaScript 类式继承与原型继承

    交叉着写Java和Javascript都有2年多了,今天来总结下自己所了解的Javascript类与继承. Javascript本身没有类似Java的面向对象的类与继承术语,但其基于原型对象的思想却可 ...

  3. Java+7入门经典 - 6 扩展类与继承 Part 2/2

    6.12 设计类 1) 通过已定义的基类派生子类, 并且添加方法和数据成员来自定义子类, 创建出类的层次结构; Dog 'IS-A' Animal 2) 定义一系列没有层次结构, 由类对象作为数据成员 ...

  4. C#图解教程 第七章 类和继承

    类和继承 类继承访问继承的成员所有类都派生自object类屏蔽基类的成员基类访问使用基类的引用 虚方法和覆写方法覆写标记为override的方法覆盖其他成员类型 构造函数的执行 构造函数初始化语句类访 ...

  5. java类的继承(基础)

    ---恢复内容开始--- 这篇随笔和大家讲讲java中类的继承是什么?希望对你们有所帮助. 目录 一.java继承是什么? 二.为什么使用java继承 三.java继承的实现 1.1  java继承的 ...

  6. 面向对象【day07】:类的继承(七)

    本节内容 1.概述 2.类的继承 3.总结 4.练习 一.概述 之前我们说到了类的公有属性和类的私有属性,其实就是类的封装,下面我们来讲讲继承,是面向对象的第二大特性. 面向对象编程 (OOP) 语言 ...

  7. python 全栈开发,Day117(popup,Model类的继承,crm业务开发)

    昨日内容回顾 第一部分:权限相关 1. 权限基本流程 用户登录成功后获取权限信息,将[权限和菜单]信息写入到session. 以后用户在来访问,在中间件中进行权限校验. 为了提升用户体验友好度,在后台 ...

  8. java继承2——类与继承(转)

    一.你了解类吗? 在Java中,类文件是以.java为后缀的代码文件,在每个类文件中最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在pu ...

  9. Java 类设计----Java类的继承

    Java类的继承 为描述和处理个人信息,定义类Person: public class Person { public String name; public inat age; public Dat ...

随机推荐

  1. AtCoder Grand Contest 011 E - Increasing Numbers(灵性乱搞)

    题意: 当一个整数高位数字总不小于低位数字,或者说写成字符串之后单调不下降,称之为上升数.求一个整数最少能表示为多少个上升数的和.(n<=1e500000) 分析: 考虑那些不下降的数字,一定可 ...

  2. reader dc

    https://get.adobe.com/cn/reader/otherversions/

  3. MongoDB小结17 - find【查询条件$or】

    我们再添加一个游泳的人,并用$in查询游泳的人 db.user.find({"hobby":{"$in":["swimming"]}},{& ...

  4. python之SocketServer编程

    编写一个SocketServer需要实现以下步骤 编写一个handler类,继承BaseRequestHandler,重写handle()方法 针对是TCP还是UDP,生成一个server对象 调用s ...

  5. 类的operator new与operator delete的重载【转】

    http://www.cnblogs.com/luxiaoxun/archive/2012/08/11/2633423.html 为什么有必要写自己的operator new和operator del ...

  6. golang 查询数据库操作

    SQL.Open only creates the DB object, but dies not open any connections to the database. If you want ...

  7. Centos7 samba 匿名共享 简单config

    安装Samba yum install samba samba-client samba-common -y 备份原始的Samba配置文件: mv /etc/samba/smb.conf /etc/s ...

  8. Java实现二叉排序树的插入、查找、删除

    import java.util.Random; /** * 二叉排序树(又称二叉查找树) * (1)能够是一颗空树 * (2)若左子树不空,则左子树上全部的结点的值均小于她的根节点的值 * (3)若 ...

  9. Message: SyntaxError: unterminated string literal

    #Message: SyntaxError: unterminated string literalmytxt = words.replace('\n','').replace('\r','') js ...

  10. 关于Web API中使用ajax发送请求方式的问题

    参见以下文章 http://www.west-wind.com/weblog/posts/2012/May/08/Passing-multiple-POST-parameters-to-Web-API ...