25 C#类的继承
继承是面向对象编程的一个重要特性。任何类都可以从另一个类中继承,这就是说,这个类拥有它继承的类的所有成员。在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#类的继承的更多相关文章
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- JavaScript 类式继承与原型继承
交叉着写Java和Javascript都有2年多了,今天来总结下自己所了解的Javascript类与继承. Javascript本身没有类似Java的面向对象的类与继承术语,但其基于原型对象的思想却可 ...
- Java+7入门经典 - 6 扩展类与继承 Part 2/2
6.12 设计类 1) 通过已定义的基类派生子类, 并且添加方法和数据成员来自定义子类, 创建出类的层次结构; Dog 'IS-A' Animal 2) 定义一系列没有层次结构, 由类对象作为数据成员 ...
- C#图解教程 第七章 类和继承
类和继承 类继承访问继承的成员所有类都派生自object类屏蔽基类的成员基类访问使用基类的引用 虚方法和覆写方法覆写标记为override的方法覆盖其他成员类型 构造函数的执行 构造函数初始化语句类访 ...
- java类的继承(基础)
---恢复内容开始--- 这篇随笔和大家讲讲java中类的继承是什么?希望对你们有所帮助. 目录 一.java继承是什么? 二.为什么使用java继承 三.java继承的实现 1.1 java继承的 ...
- 面向对象【day07】:类的继承(七)
本节内容 1.概述 2.类的继承 3.总结 4.练习 一.概述 之前我们说到了类的公有属性和类的私有属性,其实就是类的封装,下面我们来讲讲继承,是面向对象的第二大特性. 面向对象编程 (OOP) 语言 ...
- python 全栈开发,Day117(popup,Model类的继承,crm业务开发)
昨日内容回顾 第一部分:权限相关 1. 权限基本流程 用户登录成功后获取权限信息,将[权限和菜单]信息写入到session. 以后用户在来访问,在中间件中进行权限校验. 为了提升用户体验友好度,在后台 ...
- java继承2——类与继承(转)
一.你了解类吗? 在Java中,类文件是以.java为后缀的代码文件,在每个类文件中最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在pu ...
- Java 类设计----Java类的继承
Java类的继承 为描述和处理个人信息,定义类Person: public class Person { public String name; public inat age; public Dat ...
随机推荐
- Servlet实现点击计数器
以下内容引用自http://wiki.jikexueyuan.com/project/servlet/hits-counter.html: 一.Web页面的点击计数器 很多时候,可能有兴趣知道网站的某 ...
- How to force immediate stop of threads in Jmeter servers如何在jmeter执行完,立即停止jmeter
https://stackoverflow.com/questions/38900315/how-to-force-immediate-stop-of-threads-in-jmeter-server ...
- Django学习系列之captcha 验证码插件
安装部署 安装captcha pip3. install django-simple-captcha== settings.py中引入captcha INSTALLED_APPS = [ 'djang ...
- centos7容量扩充
新买的2T 绿盘到货了~~好开心的说~但毕竟是第一次安装,事先还是在网上搜索了很多资料才敢动手,下面就开始啦~ 环境:Centos7.dell服务器.2T容量绿盘 1.硬盘连接好之后,开机先使用fdi ...
- Linux操作系统改动PATH的方法
1. 暂时改动: 使用export.比如#export PATH=$PATH:/etc/apache/bin 2. 针对用户的改动: vi ~/.bash_profile 增加:export PATH ...
- iOS学习笔记(4) — UITableView的 重用机制
iOS学习笔记(4) — UITableView的 重用机制 UITableView中的cell是动态的,在使用过程中,系统会根据屏幕的高度(480)和每个cell的高度计算屏幕中需要显示的cell的 ...
- 经典面试题回答——学习Java基础的目的
本系列知识解释:相信每个学习Java的人都是从JavaSE開始的,也就是Java基础開始. 可是却并不清楚学习Java基础究竟有什么用? 首先我来回答这个问题,学习Java基础是有两个目 ...
- ugc pgc ogc web2.0 mgc
http://yjy.people.com.cn/n/2014/0120/c245079-24169402.html machine
- 【OI新闻】2016.10.26 - NOIP初赛泄题再次引爆
有点劲,开车注意点,小心翻啦~ http://www.noi.cn/noi-news/noi/743-ccfnoip2016 CCF在NOIP2016初赛结束后接到举报:初赛前(22日12时左右),网 ...
- [ACM]2013山东省“浪潮杯”省赛 解题报告
题目地址:http://acm.upc.edu.cn/problemset.php?page=13 2217~2226 A.Rescue The Princess 一个等边三角形告诉前2个点,求逆时 ...