接口和抽象类(一)
抽象类是带有Abstract关键字的class,抽象类可以包含字段,属性,普通方法,事件及特殊的抽象方法
接口是带有interface关键字并封装了对象一系列的行为,接口可以包含属性,方法,但不能包含字段和委托。方法不包含具体实现,不带public类似的关键字。
publicclassApplePhone{publicintId{get;set;}publicstringBrand{get;set;}publicvoidSystem(){Console.WriteLine("IOS");}}
publicclassGalaxy{publicintId{get;set;}publicstringBrand{get;set;}publicvoidSystem(){Console.WriteLine("ANDROID");}}
publicclassLumiaPhone{publicintId{get;set;}publicstringBrand{get;set;}publicvoidSystem(){Console.WriteLine("WINDOWSPHONE");}}
这个时候就会大量的冗余代码,我们应该建一个基类定义Id和Brand 这2个属性,并定义一个抽象方法System(),为什么不定义虚方法,因为在这里每个子类的实现都不同的。所以最终我们应该建一个抽象类,如下
publicabstractclassBasePhone{publicintId{get;set;}publicstringName{get;set;}publicabstractvoidSystem();}上面3个类继承自BasePhonepublicclassApplePhone:BasePhone{publicoverridevoidSystem(){Console.WriteLine("IOS");}}publicclassGalaxy:BasePhone{publicoverridevoidSystem(){Console.WriteLine("ANDROID");}}publicclassLumiaPhone:BasePhone{publicoverridevoidSystem(){Console.WriteLine("WINDOWSPHONE");}}手机还有玩游戏功能,这个时候我们不应该在BasePhone加一个玩游戏的方法,因为玩游戏就是一种行为除了手机能玩游戏,电脑,平板都能玩游戏,那么这个时候我们就应该把玩游戏抽象成接口,而手机则实现了这个接口。//定义一个玩游戏的接口publicinterfaceIGame{voidGame();}
publicclassLumiaPhone:BasePhone,IGame{publicoverridevoidSystem(){Console.WriteLine("WINDOWSPHONE");}publicvoidGame(){Console.WriteLine("playWINDOWSPHONEgames");}}
其他二个子类也是同样实现玩游戏功能,同样手机还有上网等等功能,但上网并不是手机独有的行为,所以我们可以增加一个IOnline接口,接口是可以实现多个的,而类只能继承一个。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。