版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第四章 继承,2,目标,类的继承 类的几种修饰符的使用(密封、抽象、隐藏) 接口 接口的继承,3,实现继承和接口继承,(1)实现继承 (2)接口继承,4,实现继承,继承父类,即拥有该类的所有成员字段和方法 比如:继承一个控件,就等于继承了此控件的所有方法与属性,节省编码量。,5,实现继承例子,1、启动vs,建立一个简单的winform窗口,输入一个按钮,在按钮事件中写入代码:MessageBox.Show(you clicked me!); 2、我们再建立一个Form窗口,我们选择“继承的窗体”,再次选择刚刚建立的Form1。 3、这样在新建立的Form2窗口中也有一个按钮了(这个按钮就是
2、继承了Form1窗口而来,而且删除不掉)。 4、我们修改入口方法main(),修改代码如下: 将原来的Application.Run(new Form1();修改为为Application.Run(new Form2(); 5、运行效果一样,但是实际上运行的是一个继承的窗体。,6,实现继承例子,Public class a Public class b:a ,7,接口继承,(1)接口类似于一个模板,它定义了一种签名方式,什么是签名? int onemethod(int a) 就是定义了一种签名方式,它的内容是空的。 如果一个具有int参数并且有int返回值的方法,我们就说满足此种签名方式。 (
3、2)一个类继承了接口,则必须要有接口中定义的签名的方式的方法。 (3)接口中定义的方法不能有实际内容。 (4)接口就是通过继承来使用的。 (5)接口不能包括字段。,8,接口继承的例子,public interface tank_action void fire(); void go(); class tank1:tank_action public void fire() Console.WriteLine(tank1 is now firing!); public void go() Console.WriteLine(tank1 is now going!); ,tank1 aa = ne
4、w tank1(); aa.fire(); aa.go(); Console.ReadLine();,9,多重继承,即一个类只能有唯一的一个父类,而不能同时继承多个 例如: public class a public class b public class c : a,b ,10,结构和类,(1) 结构派生于System.ValueType,它们不能实现继承,但是可以继承接口。 (2) 类可以继承类和接口。,11,隐藏方法,如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有声明为virtual 和 override,派生类方法就会隐藏基类方法。,12,隐藏方法的例子,class c
5、lass1 public void class1_method1() Console.WriteLine(aa); class class2:class1 public void class1_method1() Console.WriteLine(bb); ,class2 testclass = new class2(); testclass.class1_method1(); Console.ReadLine();,13,调用函数的基类版本,用base关键字表示基类 用this关键字表示本类 base.() this. (),14,调用函数的基类版本例子,class CustomerAcc
6、ount public virtual decimal CalculatePrice() return 1M; class GoldAccount : CustomerAccount public override decimal CalculatePrice() return base.CalculatePrice() * 0.9M; ,GoldAccount test = new GoldAccount(); Console.WriteLine(test.CalculatePrice(); Console.ReadLine();,15,抽象类和抽象方法,(1)抽象类用abstract来定义
7、 (2)抽象类与接口非常类似,抽象方法没有执行代码, (3)抽象类不能实例化,只能继承 (4)抽象方法没有执行代码,必须在非抽象的派生类中重写 (5)类中成员只要有一个是抽象的,则类必须是抽象的。 (6)抽象方法用override重写,而接口则不用。,16,抽象类和抽象方法的例子,abstract class Building public abstract decimal Calculate(); / abstract method class newBuilding : Building public override decimal Calculate () Console.WriteL
8、ine(aa); return 2.2M; ,newBuilding test = new newBuilding(); Console.WriteLine(test.Calculate (); Console.ReadLine();,17,抽象类和抽象方法的例子,abstract class Building public abstract decimal Calculate(); / abstract method class newBuilding : Building public override decimal Calculate () Console.WriteLine(aa);
9、 return 2.2M; ,newBuilding test = new newBuilding(); Console.WriteLine(test.Calculate (); Console.ReadLine();,18,密封类和密封方法,(1)对于一些永远也不想让别人继承我们用sealed来修饰它。 (2)当然它的方法是不可重写的,也就是不可以定义为虚方法。 (3)不能将sealed作用于方法。,19,密封类和密封方法的例子,sealed class FinalClass /不能定义为虚方法,因为本身这个类都是不需要继承的,那么定义为虚方法的意义就不大了 /public virtual
10、void cal() / / Console.WriteLine(cc); / public void cal() Console.WriteLine(cc); public static void StaCal() Console.WriteLine(bb); ,/类是不能继承的 /class DerivedClass : FinalClass / /public override void cal() / / Console.WriteLine(bb); / /,20,问题? 如果注释祖先代码,21,答案,(1)在子类中声明同样的方法 (2)在子类中声明同样的方法,并用new修饰 (3)在
11、子类中声明同样的方法,用override来修饰,当然必须祖先要有virtual修饰。,22,问题? 如何在子代码中继承祖先代码,23,答案,直接继承不重写相同的方法就可以了。,24,问题? 如何在子代码中继承祖先代码后添加代码,25,答案,用base来引用祖先代码,如下面的代码 public class aa public void one() Console.WriteLine(aa); public class bb : aa new public void one() base.one(); Console.WriteLine(bb); ,26,可见性修饰符,27,关于internal,
12、internal class Class1 public int a=3; 编译成cs文件来调用 Class1 bb = new ClassLibrary1.Class1(); 出错,保护级别限制。,internal class Class1 public int a=3; Class1 bb = new Class1(); 自己程序集中可以使用。,28,其他修饰符(注意函数成员不仅仅指方法,也指属性,构造函数、析构函数、运算符、索引器),29,一个关于属性继承的例子,public class OneClass public int aa; public int AA get Console.
13、WriteLine(abc); return 1; set aa=value; ,public class TwoClass:OneClass public int aa; public int AA get Console.WriteLine(bcd); return 1; set aa = value; ,TwoClass aa = new TwoClass(); Console.WriteLine(aa.AA); 不过这很少用,30,接口,(1)声明接口在语法上与声明抽象类完全相同 (2)接口中只能包含方法、属性、索引器和事件的声明。 (3)不能实例化接口,接口不能有构造函数。 (4)接
14、口成员总是公共的,不能声明为虚拟或静态。因为它是依附于类的。 (5)接口是可以继承的。,31,接口例子,见例子源代码下的例8,32,接口继承,见例子源代码下的例9,33,源代码放在例子源代码目录下。,34,内容总结,在本课中我们重点讲解了对象以及对象的成员,并与结构进行了比较。,35,独立实践,36,独立实践,实践1: 作一个winform应用程序,定义一个标签test,然后继承一个窗口,使继承的窗口也有此定义的标签。 实践2: 做一个动物(animal)行为的接口,包括eat和go,做一个控制台程序,定义一个动物的类通过继承动物行为来触发这两个方法。 实践3: 做一个控制台程序,定义一个类a,里面包含方法b,再定义一个类c继承
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年江苏省淮安市初二学业水平地生会考真题试卷(含答案)
- 2026年全国房地产估价师之基本制度法规政策含相关知识考试高频题(附答案)
- 2026服装加工行业的数字化生产线与管理体会报告
- 2026服装制造业供应链数字化管理系统分析报告
- 2026服务外包行业市场供需分析及投资评估规划分析研究报告
- 2026服务业新业态创新市场分析与投资策略行业深度调研报告
- 2026教育行业直播带货模式与选品策略分析报告
- 2026教育科技行业市场格局及数字化转型趋势研究与投资机会分析报告
- 解构旅游产业风险投资运行机制:理论、实践与策略
- 2026放射性医疗设备县域市场下沉策略与投资回报测算报告
- GB/T 4996-2025平托盘试验方法
- 全国教师资格证考试小学数学真题汇编题库及参考答案
- 财务会计-上交所、深交所、北交所典型会计案例研究(2025年汇编)
- 喉罩的临床应用与管理专家共识2026
- 2025全媒体运营试题库及答案
- 2025年(三级)供应链管理师考试复习题库附答案
- 2025年社区工作者招聘考试真题试卷及答案
- 2025年福建省高考生物试卷真题(含答案解析)
- 第 29 课 智能工具再体验说课稿小学信息技术人教版2024五年级全一册-人教版2024
- 宁德时代shl测试题库以及答案
- 初级注册安全工程师(安全生产法律法规)题库及答案(上海市2025年)
评论
0/150
提交评论