自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java 8 中的接口和抽象類到底有啥區(qū)別?

開發(fā) 后端
Java 8 中的接口和抽象類的區(qū)別除了接口中可以寫實(shí)現(xiàn)方法之外這點(diǎn)變化,其他的還是保持不變的。

[[347098]]

 在我們面試時(shí)也會(huì)經(jīng)常遇到面試官問抽象類和接口的區(qū)別是什么,大部人肯定會(huì)說:接口中的所有方法都是抽象的,抽象類中的方法除了抽象方法還可以寫實(shí)現(xiàn)方法,如果你還這樣回答那你就 OUT 啦,要跟上形式。

這個(gè)問題我在面試一個(gè) 39 歲的程序員時(shí),他居然也沒回答上來,其實(shí)了解 Java 8 的同學(xué)應(yīng)該都知道,Java 8 在接口中推出了默認(rèn)方法、靜態(tài)方法,打破了接口只能寫抽象方法的傳統(tǒng),如果你還不知道的可以點(diǎn)擊閱讀我之前發(fā)的這篇文章。

既然接口都能寫實(shí)現(xiàn)方法了,那么還要抽象類干嘛呢?Java 8 中的接口和抽象類到底還有啥區(qū)別?大家是不是都有困惑?

所以,棧長(zhǎng)這篇帶大家分析一下,不一定全,但希望對(duì)你有用。

區(qū)別1:

首先抽象類是一個(gè)“類”,而接口只是一個(gè)“接口”,兩者的概念和應(yīng)用場(chǎng)景不一樣,這也是抽象類和接口的主要區(qū)別。

區(qū)別2:

即使在 Java 8 中接口也能寫實(shí)現(xiàn)方法了,但卻不能寫構(gòu)造方法,而在抽象類是可以寫構(gòu)造方法的,意味著抽象類是參與類的實(shí)例化過程的,而接口則不是。

區(qū)別3:

抽象類可以有自己的各種成員變量,并且可以通過自己的非抽象方法進(jìn)行改變,而接口中的變量默認(rèn)全是 public static final 修飾的,意味著都是常量,并且不能被自己和外部修改。

區(qū)別4:

接口可以實(shí)現(xiàn)多繼承,而抽象類只能單繼承。

下面我舉兩個(gè)例子:

  1. public class HashMap<K,V> extends AbstractMap<K,V> 
  2.     implements Map<K,V>, Cloneable, Serializable { 
  3.     ... 
  4. }     
  1. public interface Connection  extends Wrapper, AutoCloseable { 
  2. ... 

類與類只能單繼承,而類與接口、接口與接口可以多繼承。

總結(jié)

Java 8 中的接口和抽象類的區(qū)別除了接口中可以寫實(shí)現(xiàn)方法之外這點(diǎn)變化,其他的還是保持不變的。

既然接口可以寫方法實(shí)現(xiàn)了,那么抽象類的存在貌似是弱化了,因?yàn)轭愔荒苁菃卫^承,耦合性不好,而接口可以多實(shí)現(xiàn),可以靈活擴(kuò)展,也不會(huì)增加類的耦合性。

雖然說是少用繼承,多用組合的設(shè)計(jì)理念,但繼承的場(chǎng)景也還是存在的,比如我們常用的模板設(shè)計(jì)模式就是抽象類和各種模板的子類,所以說,接口也不能完全代替抽象類的。

你認(rèn)為抽象類的應(yīng)用場(chǎng)景還有哪些呢?歡迎留言分享!

本文轉(zhuǎn)載自微信公眾號(hào)「Java技術(shù)棧 」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Java技術(shù)棧公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: Java技術(shù)棧
相關(guān)推薦

2011-07-10 14:07:59

JAVA

2011-05-19 18:01:56

JAVA

2009-06-16 11:30:00

Java抽象類Java接口

2009-06-14 21:31:29

Java抽象類Java接口

2011-12-22 10:48:21

Java

2011-07-12 15:58:48

java抽象類接口

2009-04-30 15:15:01

Java抽象類接口

2011-06-28 10:55:20

C#接口抽象類

2021-12-31 09:23:22

SDNSD-WAN網(wǎng)絡(luò)技術(shù)

2021-12-23 07:11:31

開發(fā)

2012-02-29 09:32:01

Java

2011-07-06 10:33:31

C#

2015-09-07 14:31:33

云計(jì)算SDNNFV

2015-02-13 10:24:51

微信

2010-03-04 09:40:04

Java接口抽象類

2020-02-07 10:55:37

抽象類接口秒懂

2015-03-23 09:33:43

Java抽象類Java接口Java

2024-03-29 11:39:57

用戶畫像用戶分群用戶分層

2023-07-03 08:10:51

2024-07-26 08:23:02

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)