C#面向对象程序设计讲义
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
接口应用例子(一)
class Airport //定义一个飞机场类 定义一个飞机场类 { static void main( String[] args) { Airport PuDongAirport = new Airport(); AirPlane Superman aPline = new AirPlane(); sMan = new Superman();
类实现接口
在定义类时,可以规定一个类实现某接口。实 现某接口的类必须要实现该接口中的所有的方 法和属性。 例如: 定义汽车(Automobile)和割草机(Lawnmower)两 个类,它们都实现了IDriveable接口。
接口的实现
类汽车和割草机 ,它们都实现了IDriveable接口。
Automobile 《Interface》 IDriveable +StartEngine():bool; +StopEngine(); +Accelerate(acc:float):float; +Turn(direction:string):bool +HonkHorn() //鸣笛
C#程序设计 程序设计
--接口 --接口
主要内容
接口的概念、定义和实现 接口的多态性 接口与继承 接口应用举例
接口的概念
什么是接口? (interface)
接口是把隐式公共方法和属性组合起来,以封 装特定功能的一个集合。 接口只负责功能的定义,而不负责功能的实现。 实现过程必须在实现接口的类中实现。
பைடு நூலகம்
接口间接实现多重继承
可以通过接口来达到多重继承目的: 可以通过接口来达到多重继承目的: interface { 聪明; 聪明; 谦虚; 谦虚; 善良; 善良; } 遗传 //爷爷的优点 爷爷的优点 //奶奶的优点 奶奶的优点 //妈妈的优点 妈妈的优点
class XiaoWei : 爸爸,遗传 爸爸, { … }
接口应用例子(三)
对象数组的排序 方法二:无需修改Employee类,即其在没有实现 IComparable接口的情况下,定义一个新类实现 Icomparer接口,指明排序规则。
class EmployeeCompare:Icomparer<Empolyee> { … public int Compare(Empolyee x,Empolyee y) { if(x.Age > y.Age) return 1; else(x.Age == y.Age) return 0; else return -1; } }
接口应用例子(三)
对象数组的排序
class ArraySort { Empolyee[] em=new Empolyee[]{ new Empolyee(“lisi”,20,1330), new Empolyee(“zhao”,36,1677), new Empolyee(“song”,27,789) } Array.Sort(em,new EmployeeCompare()); }
接口更重要的作用是:用来制定模块与模块 之间进行通讯的协议。 模拟硬件生产的例子 1、新建一个显卡(VideoCard)接口 2、由显卡厂商类实现显卡接口 3、生成一个主板类 4、产生一个电脑类
接口应用例子(三)
对象数组的排序 假设有一个Employee数组,每个雇员对象 包括(name, age, salary)三个字段,现在 数组要根据某一字段排序,该如何进行?
接口的概念、定义和实现 接口的多态性 接口与继承 接口应用举例
接口与继承
C#中一个接口可以继承自另一个接口。 不允许类的多继承,但允许接口的多继承。 C# C#中一个类可以实现多个接口。 一个类在继承一个类的同时,可以实现多 个接口。
接口与继承
interface ISittable { void Sit(); } interface ILie { void Lie(); } interface IChair :Isittable //接口间的继承 接口间的继承 { } interface ISofa :ISittable,ILie //接口间的继承 接口间的继承 { }
接口应用例子(三)
对象数组的排序
class ArraySort { Empolyee[] em=new Empolyee[]{ new Empolyee(“lisi”,20,1330), new Empolyee(“zhao”,36,1677), new Empolyee(“song”,27,789) } Array.Sort(em); }
接口应用例子(三)
对象数组的排序 方法一:要使Employee类对象可排序,类 必须实现IComparable接口,指明排序规则。
class Employee:IComparable { … public int CompareTo(Object obj) { Student stu = (Student)obj; return pareTo(stu.age); } }
}
接口举例
类运动员和袋鼠 ,它们都实现了ISport接口。
Athlete 《Interface》 ISport +Run(); +Jump();
ISport
Roo
ISport
接口的概念、定义和实现 接口的多态性 接口与继承 接口应用举例
接口多态性
一个类如果实现了某接口,就可以认为该类也是 此接口类型,该类对象也就可以赋给由此接口类 型定义的引用变量。
public static void Fun(IDriveable vehicle) { vehicle.StartEngine(); vehicle.StopEngine(); } public static Main() { Automoblie auto = new Automobile(); Fun(auto); Lawnmower mower = new Lawnmower(); Fun(mower); }
接口与继承
interface ISittable { void Sit(); } interface ILie { void Lie(); } class MyClass1:Isittable,ILie //一个类实现多个接口 一个类实现多个接口 { } class MyClass2:MyClass1,ISittable,ILie { }
接口的概念
接口是一种比继承类更为灵活的构建类体系结构 的方法。 虽然继承是现实世界中最为深刻和本质的联系之 一,但是这种联系毕竟还是比较少的。更多的情 况是在某些方面有相似性,但是整体来说却是完 全不同的事物。 比如:汽车和割草机都可以启动,停止,加速, 转弯它们具有一定的共性,但要抽象其父类却是 困难的,这时候就可以利用接口来抽象出它们的 共性。
PuDongAirport.givePermissionToLand(aPlane); PuDongAirport.givePermissionToLand(sMan); } private void givePermissionToLand( Flyer nd(); } } f){
接口应用例子(二)
接口应用例子(三)
对象数组的排序小结
一个类实现了ICamparable接口表明这个类的对象之间是可以 相互比较的。如果用数学语言描述的话就是这个类的对象组 成的集合中存在一个全序。这样,这个类对象组成的集合就 可以使用Sort方法排序了。 而IComparer的作用有两个: 1、如果类的设计师没有考虑到Compare的问题而没有实现 IComparable接口,可以通过IComparer来实现比较算法进 行排序。 2、为了使用不同的排序标准做准备,比如:升序、降序或 其他什么排序规则。
//ok
接口的概念、定义和实现 接口的多态性 接口与继承 接口应用举例
接口应用例子(一)
接口应用例子(一)
接口应用例子(一)
class Bird : Animal,Flyer , { public void takeOff() { /*implementation */ } public void land() { /*implementation */ } public void fly() { /*implementation */ } public void buildNest() { /*behavior */ } public void layEggs() { /*behavior */ } public void eat() { /* behavior */ } }
接口的定义
定义一个IDriverable接口
interface { bool void float bool } IDriveable StartEngine(); StopEngine(); Accelerate(float acc); Turn(string direction);
接口的实现
Thank You!
Thank You!
IDriveable
Lawnmower +CutGrass() //割草
IDriveable
接口的实现
class { Automobile :IDriveable … bool StartEngine(){ if( notTooCold) engineRunning = true; … } void StopEngine(){ engineRunning = false; } float Accelerate(float acc){ … } bool Turn(string direction){ … } void HorkHorn(){ … }
接口间接实现多重继承
class 爷爷 { 聪明 } class 奶奶 { 谦虚 } class 爸爸 { 幽默 } class 妈妈 { 善良 }
class XiaoWei : 爸爸 { … }
//ok
class XiaoWei : 爸爸,妈妈,爷爷,奶奶 爸爸,妈妈,爷爷, { … }
//error