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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

慕粉0744549703 2017-09-07 16:58:10
不能重新定義一個抽象類來描述兩個對象的特征嗎?比如智能手機和psp都能玩游戲,psp不屬于手機,那重新定義一個抽象的電子產品類,描述它們玩游戲的特征。是因為單繼承嗎?(講繼承的例子里智能手機繼承了手機類)如果是這樣,這就是接口和接口繼承可以多個父接口的意義嗎?
查看完整描述

1 回答

已采納
?
onemoo

TA貢獻883條經驗 獲得超454個贊

單說你的這一句問題“不能重新定義一個抽象類來描述兩個對象的特征嗎?”

其實是可以這樣定義的。

假如你的程序中只有“智能機類”和“PSP類”這兩個類,并且你只是想單純地對這兩個進行抽象,那可以像你說的這樣:抽象出一個“可玩游戲的電子產品類”。 然后從它派生出“能打電話的可玩游戲電子產品——手機”和“專門玩游戲的電子產品——PSP”。 ?這樣使用單繼承也還算能勉強適合這種簡單的抽象。


不過你有沒有覺得這樣抽象在邏輯上似乎不那么貼切?

智能機本質是手機,玩游戲并不是必備功能,所以按說“智能機類”可以繼承自“手機類”?!笆謾C類”可以有打電話的功能。

而 PSP 本身就是游戲機,也許可以讓它繼承自“掌機類”。

掌機和手機在概念上沒什么關系,也就不適合從更低層的“玩游戲的電子產品”繼承而來了。

所以當你想擴展你的程序、加入更多的抽象層次時,如果仍只采用類來抽象而不用接口的話,就會遇到很多麻煩。而這正是因為 Java 中沒有多繼承。?


因為 Java 沒有多繼承,也就不能用?同時繼承多個基類的辦法?來表示同時具有多個抽象概念。 所以就引入了“接口”來表達不同的抽象概念。而且這樣還能很好地進行語義上的區分:

  • class 在語法上表示類型,并且多個 class 可以組織成繼承體系來表示不同抽象層次的類型。在語義層面上用 class 來表示“對象”(以此進行所謂“面向對象”編程),并且在語義上?class 偏向對“實體”的抽象

  • interface 并不是 class。在語法層面上你可以把 interface 看作是對 class 施加的規范——它要求實現它的 class 必須實現相應的 method 等。 而?interface 在語義上更偏向于對“功能”的抽象。

所以你最后一句話的理解方向是對的! ?Java 在設計上沒有選擇使用多繼承,而是選擇通過接口來對“對象的各種功能特性”作抽象,因此接口可以進行多繼承,接口也可以組織成繼承體系。 ?這樣的好處是可以在語義層面進行更細致的區分。


還用你題目中的例子作分析:

智能機和 PSP 都能玩游戲。這個“玩游戲”應看作是一種功能,所以抽象為接口。而“智能機”和“PSP”本身更像“實體”的概念,應被抽象為類。

這樣,“智能機類” 繼承自“手機類”并實現“玩游戲接口”。而“PSP類”也可以實現“玩游戲接口”,同時完全不屬于手機的概念,它可以繼承自“掌機類”之類的。 ? ?這看起來要合理多了。

查看完整回答
1 反對 回復 2017-09-08
  • 1 回答
  • 1 關注
  • 1568 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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