亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

接口 和 抽象類 有什么區別?

標簽:
Android

这是初学者经常会遇到的问题,看到这个问题,自己想起来以前痛苦的学习过程。简单的回答一下。接口和抽象类之间有没有区别?可以肯定的回答:有区别。那既然有区别,我们不妨带着疑问去探索一下,语言设计者们在设计接口和抽象类时为什么要设计出区别,他们的目的何在。编程语言的设计其实也是一门哲学。


首先接口和抽象类的设计目的就是不一样的。接口是对动作的抽象,而抽象类是对根源的抽象。对于抽象类,比如男人,女人这两个类,那我们可以为这两个类设计一个更高级别的抽象类–人。对于接口,我们可以坐着吃饭,可以站着吃饭,可以用筷子吃饭,可以用叉子吃饭,甚至可以学三哥一样用手抓着吃饭,那么可以把这些吃饭的动作抽象成一个接口–吃饭。所以在高级语言中(如Java,C#),一个类只能继承一个抽象类(因为你不可能同时是生物又是非生物)。但是一个类可以同时实现多个接口,比如开车接口,滑冰接口,啪啪啪接口,踢足球接口,游泳接口。


总结几句话来说:


1、抽象类和接口都不能被直接实例化,如果二者要实例化,就涉及到多态,不懂多态的参见我的回答JAVA的多态用几句话能直观的解释一下吗? – 知乎。如果抽象类要实例化,那么抽象类定义的变量必须指向一个子类对象,这个子类继承了这个抽象类并实现了这个抽象类的所有抽象方法。如果接口要实例化,那么这个接口定义的变量要指向一个子类对象,这个子类必须实现了这个接口所有的方法。


2、抽象类要被子类继承,接口要被子类实现。


3、接口里面只能对方法进行声明,抽象类既可以对方法进行声明也可以对方法进行实现。


4、抽象类里面的抽象方法必须全部被子类实现,如果子类不能全部实现,那么子类必须也是抽象类。接口里面的方法也必须全部被子类实现,如果子类不能实现那么子类必须是抽象类。


5、接口里面的方法只能声明,不能有具体的实现。这说明接口是设计的结果,抽象类是重构的结果。


6、抽象类里面可以没有抽象方法。


7、如果一个类里面有抽象方法,那么这个类一定是抽象类。


8、抽象类中的方法都要被实现,所以抽象方法不能是静态的static,也不能是私有的private。


9、接口(类)可以继承接口,甚至可以继承多个接口。但是类只能继承一个类。


10、抽象级别(从高到低):接口>抽象类>实现类。


11、抽象类主要是用来抽象类别,接口主要是用来抽象方法功能。当你关注事物的本质的时候,请用抽象类;当你关注一种操作的时候,用接口。


12、抽象类的功能应该要远多于接口,但是定义抽象类的代价较高。因为高级语言一个类只能继承一个父类,即你在设计这个类的时候必须要抽象出所有这个类的子类所具有的共同属性和方法;但是类(接口)却可以继承多个接口,因此每个接口你只需要将特定的动作方法抽象到这个接口即可。也就是说,接口的设计具有更大的可扩展性,而抽象类的设计必须十分谨慎。

原文链接:http://www.apkbus.com/blog-866962-76551.html

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消