抽象类和接口的区别.docx
- 文档编号:10155086
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:34
- 大小:42.51KB
抽象类和接口的区别.docx
《抽象类和接口的区别.docx》由会员分享,可在线阅读,更多相关《抽象类和接口的区别.docx(34页珍藏版)》请在冰豆网上搜索。
抽象类和接口的区别
抽象类和接口的区别
各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢
接口和抽象类有什么区别
接口和象抽类的念概不一。
接样是对口动作抽的象,抽类象对是根源抽象。
的
抽类象示的是,表这对个是什么象接口表。
的示,这是个对能做什象。
么比如,男
,人女人这两个类…他们的抽,象是类。
人明说,们他都人是。
可以吃人东西狗,可也以吃东西你,以可把“吃东西定义成”一接口个,后然让些这去类现实它
.
所以,高级在言上,一个语类能只继承一类(抽如正不可人能时是生物和非同物生,但)可是实现以个接口多吃(饭口接走、路接)口。
第一点.
接口抽象是的变体类接口中,所有方法的是都抽的。
而象抽类是象声明方的存法而不去实现它在类。
的二点第.接口可以承继抽,类象不行第三点.
接定义口法,不方能现实,抽象类可以而现部分实方法。
第四点.接口基本数中类据型为sttaci抽而类象不的是。
当
你注关一事物个本质的时的,用候象抽类当你关注一;操作的时候个用接,口。
接口
可以实也可以现承,继抽类不象行
象抽往往类用来征表们我在对问题领进行分域、析计中设出的得象概念,是抽对系列看上一去不同,是本但上质相同具体概念的抽象。
的
以用征抽象概念的抽表象类不能是实例够化。
的
使用bsartatcclass方式定的义emo抽D象的方类式下:
如
ab
trsctacassDleom{
absrtcatoivdmetoh1()d;a
stracbtvodimethod2)(
…
}
可;以自有己数的据成,员可以有非抽象也的成方员法;a
stbacrtlcas只s能单承;继ab
tractsclas可s赋以予方的默法认为行;
bstracactals表s的是”示is-”关系a
;抽象中的变量默类认是frinelyd,其型值以可在类中重新子定,也可义重以新值赋;
使
i用tnrfece的方式a定Demo抽象义的类式方下如
:
interfcaDeemo{
oidvethomd1(;
v)odiemthod2(;)
}…只能够有
静的不态被修改的数据能员有成的员方法是都abtsrcta;的
从某意义上种说i,ntefacr是e一种特形殊的ab式srtcatlass;c
一类却个以实现多可个itenracfe;
niertface方法不的拥有默认行能,为可以使但用委托;int
efacer示的是表”ilk-e”关系;a
口中接不能实现方有法;
接中口的法默方都是publ认icastbratc类型接口
中定的义变默量认publi是cstticafinal,型且必须其初给,实现值不能类重新义它,也定不改变能值其;抽象类与接口的区别
Abstarcctass和inlt*e**c是Java语言中对e抽象于定类进义支行持的两机制,正是由种这两于机制的存在,种才予赋了Jva强a的大向面象对力能。
batracsclasts和ine*t*ce之间*在对抽于象类义定支的持方面具有很大的相似,甚至性可相互以换,替此因很开多发者进在抽行类象义时定于对batrastccalss和ntei***c的选e显择比得较随。
意在,实两者间之还是很大有区别的,对的它于的们选甚至择映出反于对题目领域质本的理、对解设于意图计的解理是正确否、公。
道本将对文们它间的区别进行之番剖一析试,图开发者给供提个一在二者间进之选择行的依据。
理解
抽类象
bsatacrctlas和sint*e**ceJ在va语a中都是言用进行抽来类意义定,那么的么什是象类,使用抽抽象类能为们我带来么好什呢处?
在面
对象向的概中,我念们知所有的道象都对通过是类来绘描的但是,过来却反不是样这。
不并是所有的都是用来类绘描对象,的假一如个类没中包含有够的足信息描来一绘具个的对象,体这样的就是抽象类类抽。
象往类用来往表我们在征对题领域进目分析、设行中计出的抽象概念得是,对系列一上去看同,不是但质上相本的同具体概念的象抽比如:
假。
如我们进一个图形编行辑件的开软,发就发会现题领域存在目着、圆角形三这一样具体概念些它,们不同的是但是它,又们属都于外这样形个概念,外形这一概个念题目领域在是存在的不,它就一个抽象概是念。
是正由抽于的概念象在目领域题有没应的具对概体,念以所用表以抽象征念的抽象类是不能概够实例的。
化
在面
对向象域,抽领类主要象来进用行类隐型。
藏我可们以构出造一固个的定组一行的为抽象描述,是这组但行却为够有任意能可个的具体实能方现式这。
抽象描述就是个象抽,类而这组一任意个可的能具实体则现现表为有所能可的派生。
模类块可以纵操一抽个象体由。
模块依靠于一个于固定的象体抽,此因可它以不答是应改的;同修时通过,这个从象抽体生派也可扩,此模块的行为功能。
熟展OC悉P的读一定者知,为了道够实现能向面对象计的设个一核心最的原O则CPO(en-ClpsoePdinrcpile,)象类抽是中的关键所其在。
语从定法层义面看absractcltassi和tn*e**ec
在语
法面,层Jvaa言语对于abstartclascsi和tne***e给c出不同的定义了方式,面以定下一义名个D为em的抽o类象为来说明例这种不同。
使用abtrsactlacs的s式方定De义mo抽象类的式如下:
方
batsarctlacssDem{abstoratcvidoemhtd1(o;)bas
tratcoivmedhod2();t}…
幸 ,福如假它是属只我于成,上千万当人的一个人中的财,那产快就我这从滚儿开吧!
——别林基
斯
使
用ite*n*c*e方的式定义eDmo象类的抽方如式:
下
itn*e**cDeemov{idmethood();1vodmiteho2d()…;
}
在asbracttlass方式c,D中eo可以m自己有数的成员,据也以可有非bstarcat成员方法的,而i在ne***tec方式实的现中,eDm只能o有够静态的能被不修改数据成员员,有的所员方法都是a成btsract。
的从种某义上意,in说e*t**e是c种特殊形一式的bsaratctlacss
从编程。
角的度看来a,bsrtctaclassin和t*e**ce可都以用来现实&qot;uedsingyconbrtatc&quto;的想。
思但在是体的使具上面还用是一有些区别的。
首,abst先rcatlcss在Jaava语言中表示是一的继续种系,一关个类只能使一次继续用系关。
是但一个,却类以实可现个i多nte***ce也许。
这是ava语言J的设者计在虑J考va对于多重继续a支持的面的一种折衷方考虑吧。
次其在,batracstlcsa的s义中定我,可以赋们予方的默认法行。
但为在i是nte***ec定的义中方,却不能法拥有认行为默,了绕过这个限制为,必使须委用,托但这是增加一些复杂性,有时会造会很大的麻成。
烦
在抽象中类不定义默认能为行存在还另个一较严重的比目,题那是可能就造会成护维上的麻。
由烦于如后来假修改想类的面界以表应适的情况就,非会的麻常,烦能可花费要很的时间此。
是假但如界面是通过basrtcatlacss实来的现那,么可能就只要修需定义在a改stbrctalcas中s的默行认为可就以。
了
同样
,假如不在能抽象中定义类认默行为,就导致同会样方的法实出现在该现抽象的每类一个生派中类,反违了&uqt;oonreule,onpelceaqu&o;t原则造成代,重码复同,样不于利以后维护。
的此因在,bsatrctalcas和siten**ce间进*选择行要非时的小心常
。
关于抽象类和接口区别
20接.和口象类相抽.关
始原义:
定
抽类象java,中定义可一不含方法体的方法些,的实现它交给该类的子类据自己根情的去实现况这样的,方法是抽象方就法包含,象抽方的法叫做抽象类.必须类a用sbtrat来修c.饰只需明,不需声实现.要有抽含象法的类方必被须声为抽象类明.
抽
类的象子类必覆须所有盖的抽象法后才能被实方例化,则否个这子类还是象抽类.
象类抽中的方不全是抽象法,的有抽但象法的肯定方是抽类象
接口.:
如果个抽一类中所有的象方法是抽都象,的么那可就用接以来定义.也就口接口.是
接口是抽方法和象常量的定义值集合.的
质本,上口是接一特种殊抽的类.象这抽象类只种包含量和方常法的定,而义有变没量和法方的现.实
.1 接中的成员都是p口bluci,.接中的口变标量为:
识pulicbsattic
2. A接口可以用xetnds去继e承接B.口
3
.用milempenst关键字去实现一接口中个义定部分的法.
方
.4 个一类可继承一以个类的同时父实,现一个或者个接多.ex口tedn必须s位于milempnes之t前.
面题:
试
接是口否可继以接承口?
接可以继口接承.口
抽
类是否象以实现接可口?
象抽类可以现实(milempnts)e接口
,抽象类是
可以否继承体类具?
可.以
抽类中象否是以有静态的可mian方法?
可.以
备
注
:
只要住,记象抽与普通类的唯类一区别就是能不创实例对建和象许允a有stbcrt法方!
写clneo)(法,通方都有常一行代码,什为么?
loCen缺有行省为super.,coln();e为首先要把父因类中成的员制到复,然后才位复是自己的成员.制
Ob
ejc类有t一cl个neo法方,用来创并建返回对象的一此副个本,这方个是p法orectetd的,们我已的自类使用c要olne方,就必须法扩大问权限为访publci,:
如
pu
blicObejctclnoe()trowhsCloneotNupSortedpEcxetpino{sup();}e
和iternafce有什么区?
别
1抽.类可象有以造构法,方口接不以可.
2抽象类.中以有可普的成员变通量,通普的抽象非方法接.口可不.以
3.象类抽的中抽象法的访方类型问可以说pbluci,rptoetecd和认类默型,但,口接的抽方象只能法是pbliu,c认即为默publicbsartac类型.
t4.抽象方法可以包含静
态法,方但口接可以不
.
5抽象.类接和口中可以包含静态成都员量.抽变类象静中态员成量变的访问型可类任以.但意口接只能是ublpicstatcifial类n(默认)型
6
一.个可以类现多个接实口但只,继承一个抽能象类.
.者在两用应上的别如区:
下
口更接多的在是系架构设计统法发挥作方,主用要于定用模义块之的通信间约契.
而象抽类在代码实现面方
发挥用作,可实以代码的重现用.例,如模块计模式是抽设象的类个一典应用型假设,某羡慕个所的Se有vlrt类e要用都同的方式进行相权限判断,录访记问志和日理异常,那处么就可以义定个抽一的象基,让类所的Se有vrlt都e继承个这抽象基,类在抽象基类的sevrci方法e中成完权限断判记录访问,日和志处理异常的码,让代各子个中类是完只成自的业各逻务辑码,伪代码如代下:
vewpiliacnoyppirt?
npubilcasbtractclssaBsaSeerlvteextendHtspSterlvet
{
pu
lbificnavoldiervise(HctptServleRequtetsrequset,tHtpSrevelRetpossnreepsosn)theorwIsOExcteon,SirvleetxcEpetoin
{
/记/访问录日志
//行权限判进断
if具(权限有)
{
rty
{
dSeovicr(eeruqes,tesronpes);
}
cach(tEcxteiopn)e
{
//记异常录息信
}
}
}
prteocetadsbtractvoidoderSvce(iHtpStreletveRqesurequetst,tHpteSrvltReesopnesresposen)trohswOIEcexiton,SrvletEecepxiot;n
//意注访权限定义问成rpoteted,c显既得业,专严又谨因,为是专门给它子类的用
}
ublipcclsasyMeSrvel1texetnsBdaeSesrvlte
{
pro
tetcdevoiddSoevirceHt(pSetvletRrquesterqeeus,tttpHSreletvesRopsenrepsosn)ethrowIsOxEceiot,nSerletExcvpetoin
{
/
/本ervSlte只处的具理业体逻辑务代码
}
}
pbluciabtsractclassaseBSrveeltxtenesdHtpStevlrte
{
pulicfbianlvodseivrce(HittpervSleRetqeutrsqeeut,sHtptSrveletesRpnoesersposn)ehrotsIOEwxecitno,eSvletrEceptxon
{i
/记/访录日志问
//
行权进判断限
i(f有具权)限
{
tr
y
{do
Sreicevr(quesetre,posne);s
}
cat
chE(cxetpoine)
{
//录记异常信息
}
}
}
protctedaebsrtactoviddoSrevce(ittpSerHlevtRquesterqeues,HtttpeSvletreRpsnosreepsosne)hrtwsIOoEcxtion,SeerletExvcpeiont;
/注/意访问限权义成pro定ectte,d得显既业,专又严,谨为它是因门给专子用的类
}
publiccaslMsySevlet1rexetdnsBaseeSrlevt
{rpteotecdvodidSeorice(vtHptSevrltReeuestrequqes,HttpteSrvetlesRposnresponse)ehrowstIOxcEteon,SeivrleEtceptxion
{
//S本evlrt只处e的具体业务逻辑代码理
}
}
父
类方法中间某的段代不确定,留码子给干类就,用板方法设计模模式
。
sbtacr的methto是d可否同是s时taict是,否同时可n是tiaev是,否可时同是syncrhonize?
d
貌似不都
行abst
artcm的ehtd不可o是st以tic的,因为抽a的方法象要是子类实现的,被s而ttaci子类扯与上关系!
不atnvi方法e示表方该法用要另一外种赖依台的编平程言语现实,不存在的着被类实子的问题现,以所它,不也能是象抽,的能与不abtsacrt混用。
例如,FieOltpuuSttema类硬要件打交道,层的实底现的用是操作系统关的a相pi现,例如,在实iwdnow用c语言实现的s,所以,看查jdk的代源,可码以发现FileOutupSttrem的opean方法定义如的:
下priavetantveivoidpeo(Stninrgame)thnorswileFotFNonudxEeptcoin;
如果我
们用jav要调用别a写的人语c函数,言们我无是法直接调的用,我们需按要jav照的要a求写个一语言c的数函,我又们的个这c言语函数去调别人用的语言c数。
函于我们的c语由函言是数按ava的j求来要写,的我这个们c语言数函可以就j与vaa接对,上ava那边的j接对方式是就义定与出们我这个函数相c应对方法的,jvaa中应的对法不需要方写具的代码体但,要在需面前声na明tive。
关syn于crhnioze与adstbact合用的r题问,觉得我不行也因为,我在年几的学和习开发中从,没来到见过种这情况并,且觉得s我ycnrhoinze应该d是用作一在个体具的法方上才意义。
有而且,法上的方ynshrocnzide步同所用使同的步对锁象是this,抽而方法上无象确定法this什是。
么抽象类与接口的区别
C#抽象类与接口剖析
授课题目:
C#抽象类与接口剖析
教学目标:
1、掌握抽象类、接口、虚方法、重载等相关概念
2、区分、掌握抽象类和接口的用法
教学难点:
1、抽象类、接口的区别和用法
2、抽象类、接口的实现
授课课时:
1课时 授课人:
李书举教学内容:
一、导入语:
抽象类和接口都是进行面向对象设计时专用的设计结构,在实际进行项目设计时,经常需要考虑的问题就是使用抽象类还是接口?
下面通过对于抽象类和接口进行简单的比较,熟悉两者之间的区别和联系,从而在实际设计时使用恰当的结构。
二、相关概念
1、抽象类:
声明方法的存在而不去实现它的类被叫做抽像类或含有一个或多个抽象方法的类称为抽象类且不能实例化。
2、接口:
是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。
三、抽象类与接口的异同
1、类是对对象的抽象,抽象类则是对类的抽象.而接口只是一个行为的规范或规定。
2、一个类一次可以实现若干个接口,但是只能扩展一个父类。
3、如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口方法。
4、接口和抽象类都不能实例化,都包含未实现的方法声明,派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员。
5、抽象类用abstractclass声明,接口用interface声明,接口名称前要加‘I’,接口中的方法或属性前面不能有修饰符、方法没有方法体。
四、抽象类与接口的用法
1、什么时候使用抽象类或接口?
当设计中为了规范类中方法声明的结构时,使用抽象类或接口。
也就是强制子类对外部提供统一的方法声明时,使用抽象类或接口。
2、什么时候使用抽象类?
当满足以下的条件时,最好使用抽象类进行设计:
a)子类不继承其它父类
b)子类中存在完全相同的功能实现的方法
c)子类中存在相同的属性
d)设计出的结构需要继承其它类
当需要满足d条件时,只能使用抽象类,否则也可以考虑使用接口实现。
3、什么时候使用接口?
当满足以下的条件时,最好使用接口进行设计:
a)子类已经继承了其它父类
b)子类中不存在完全相同的功能实现方法
c)子类中不存在相同的属性
d)设计出的结构不需要继承其它类
当需要满足a条件时,只能使用接口,否则也可以考虑使用抽象类实现。
4、抽象类和接口的其它用途
a)禁止创建该类的对象时,可以把该类声明为抽象类。
b)当需要存储大量的常量数据,而这些常量数据将会在项目中的多个类之间使用时,可以使用接口。
c)当需要统一具有某种功能的类的对象时,可以使用接口。
五、小结
抽象类、接口概念;抽象类、接口异同;抽象类、接口用法
六、结束语
当然,只有经过大量的系统设计训练以后,才可以更加深刻的理解抽象类和接口的区别和联系,从而更加自如的进行选择。
另外,需要说明的是,不是每个项目中都必须使用抽象类或接口的。
抽象类和接口的区别
抽象类接口联和与系别区
关键字:
象类抽接与的区口别ab
srtctcaalss和niterfae是cavaJ言语中对抽象类于定进义行支持两的机种,正是由制这两于种机制存在的,赋才了J予aa强v的面向大对象力。
能abtsactclarss和interacfe之间对在抽象类于定的支持方面具义很大的有似性,相甚可至以互相换替因,很此多开者发进行在抽类象义定对于a时strabtccasls和intreace的f择选得显较比意。
随
其,实者两间还之是有很大区的别,对的它于的们选择至反甚映对出问于题域领本的质解理对、于计设意图的理是否正确、解理合本。
文对它们之间的将区别进行番一析剖试图给,发者提供开一在个者二之进行选间的依择据。
一
理、解抽类象
abtracsctalssin和ertacfe在Java语言中都用是进来行象抽定义,那么的什是么抽类象使用抽象,类能我们带为什么来处好呢?
在面
对象的向概中,我念们道所有知对的象都是过通类来绘描,的是但过反来不却这样是并不。
所有是的类是都用描绘来对的象如果,个类一没中有含足够包信息的来描一绘个具的体对,象样的这就类抽是类象抽象。
往类往用表征我们来在问对题领进域行分、析设计中出的得象抽概念是,对一列系上去看不,但是同本上质相的同具概体的念抽象。
如比:
果我如们行进个图形一编辑件软开发,就的发会现问题域领存着圆在三、形这样一些具体概念角它,是们不的同但是它们,又都属于形这样一个概念,形状状这个概念问题在域是不领在的,它就存是个一抽概象念。
是因为正象抽概念的问在题领没域有应的对体概念,具以用所表征以抽象概的念抽象类不是能实够化的。
例
在
面对象领域,抽向类象要用来主进类行隐型。
藏们我可以构造一个出固定一组行的的抽为描述象,但是这组行为能够却有意任可个能具体的现方式实。
这个象描述就是抽象抽,类这而一组任意个可的能体具实现表现则为有所能的派可类。
生模块以操作一可个象抽体由于。
块模依于一赖个固的抽定体象因,它此以可不允是许改修的;时,同过从通这抽象个体派,也生可扩此模块的展为功行能。
悉O熟P的C者一定知道,读了能够实为现向面对象设的计个最核心一的原则OCPO(penC-osldePricipne),l抽象是类其中关键的在所。
二
从语、法定义面看ab层tractscals和sinetrafce
在语层法,面aJa语言对于vabstacrtclas和insetracf给e出了不的同义定方式,面以定义一个名下为emDo抽象的类例来说明这为种同不。
使用abtsartclassc的式方义De定mo抽象类方的式如:
下
jvaa代码
batrsactclassDeo{m
abstrctvaoidethomd(1;)
abtsratcvodimehtod2(;)
…
}
使用inerfatc的方e定式义emDo抽类的方式象如:
下
jaa代v码int
erfaecDeom{
ovidemtodh
(1);
v
oidmehodt(); 2
…
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 抽象 接口 区别
![提示](https://static.bdocx.com/images/bang_tan.gif)