秒懂抽象類和接口到底是什么垃圾
前言
這幾天給別人講JavaSE基礎(chǔ),又把面向?qū)ο罂戳艘槐?,講的時(shí)候發(fā)現(xiàn)一個問題,就是當(dāng)時(shí)講抽象類和接口的時(shí)候說接口也是抽象類,是個特殊的抽象類,當(dāng)時(shí)聽的時(shí)候別人確實(shí)能聽懂,因?yàn)榇_實(shí)沒多少東西,但是真正用的時(shí)候總會猶豫,到底什么時(shí)候該用抽象類什么時(shí)候用接口呢?
如何區(qū)分使用抽象類和接口
大家在比較抽象類和接口的區(qū)別時(shí),一定要強(qiáng)調(diào)抽象類描述的是事物的本質(zhì),而接口描述的是事物的功能。比如:保溫杯是水杯,所以水杯應(yīng)該設(shè)計(jì)為抽象類,保溫杯有保溫的功能,所以保溫應(yīng)該設(shè)計(jì)為接口。
可理解為:
class 保溫杯 extends 水杯 implements 保溫
用實(shí)例說話
- package
- zmldemo
- ;
- //水杯抽象類
- public
- abstract
- class
- Cup
- {
- String
- name
- ;
- //水杯名稱
- String
- color
- ;
- //水杯顏色
- public
- Cup
- ()
- {
- }
- public
- Cup
- (
- String
- name
- ,
- String
- color
- )
- {
- this
- .
- name
- =
- name
- ;
- this
- .
- color
- =
- color
- ;
- }
- //水杯使用說明方法
- public
- abstract
- void
- useCup
- ();
- }
- package
- zmldemo
- ;
- //保溫接口
- public
- interface
- BaoWen
- {
- //保溫方法
- public
- void
- baoWen
- ();
- }
- package
- zmldemo
- ;
- //刷牙杯
- public
- class
- ShuaYaBei
- extends
- Cup
- {
- public
- ShuaYaBei
- ()
- {
- }
- public
- ShuaYaBei
- (
- String
- name
- ,
- String
- color
- )
- {
- super
- (
- name
- ,
- color
- );
- }
- @Override
- public
- void
- useCup
- ()
- {
- System
- .
- out
- .
- println
- (
- "我是"
- +
- this
- .
- color
- +
- "的"
- +
- this
- .
- name
- +
- ","
- +
- "我是用來刷牙的"
- );
- }
- }
- package
- zmldemo
- ;
- //保溫杯
- public
- class
- BaoWenBei
- extends
- Cup
- implements
- BaoWen
- {
- public
- BaoWenBei
- (){
- }
- public
- BaoWenBei
- (
- String
- name
- ,
- String
- color
- ){
- super
- (
- name
- ,
- color
- );
- }
- @Override
- public
- void
- useCup
- ()
- {
- System
- .
- out
- .
- println
- (
- "我是"
- +
- this
- .
- color
- +
- "的"
- +
- this
- .
- name
- +
- ","
- +
- "我是用來喝水的"
- );
- }
- @Override
- public
- void
- baoWen
- ()
- {
- System
- .
- out
- .
- println
- (
- "我能對水杯里的水進(jìn)行保溫"
- );
- }
- }
- package
- zmldemo
- ;
- public
- class
- CupTest
- {
- public
- static
- void
- main
- (
- String
- []
- args
- )
- {
- ShuaYaBei
- shuaYaBei
- =
- new
- ShuaYaBei
- (
- "刷牙杯"
- ,
- "紅色"
- );
- shuaYaBei
- .
- useCup
- ();
- BaoWenBei
- baoWenBei
- =
- new
- BaoWenBei
- (
- "保溫杯"
- ,
- "金黃色"
- );
- baoWenBei
- .
- useCup
- ();
- baoWenBei
- .
- baoWen
- ();
- }
- }
運(yùn)行結(jié)果:
我想看到這,學(xué)過抽象類和接口的朋友應(yīng)該能理解了,那本篇標(biāo)題“抽象類和接口到底是什么垃圾——秒懂”對應(yīng)的部分完成了,既然都說到這了,再來點(diǎn)延申。
話題延申
抽象類和接口能實(shí)例化對象嗎?
這個問題其實(shí)也有很多人糾結(jié),我之前專門有過對這個問題在網(wǎng)上進(jìn)行搜索查詢,看了好幾篇別人寫的博客,結(jié)果答案不一,理解各不相同,有的博客里的理解還有錯誤,容易對別人誤導(dǎo),后來我自己查資料,用自己的理解寫了一篇博客《抽象類能實(shí)例化嗎?——口氣很強(qiáng)硬——“不能”(詳解)》,結(jié)果當(dāng)然正如其名所示,是不能的,至于為何,里面有詳細(xì)的解釋,大家自行查閱,在這就不做補(bǔ)充了。