欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java程序開發(fā)中abstract 和 interface的區(qū)別詳解

 更新時間:2022年01月19日 14:48:44   作者:士多啤梨蘋果橙  
abstract class和interface在Java語言中都是用來進行抽象類。但是兩者有什么區(qū)別呢,接下來小編給大家?guī)砹薬bstract 和 interface的區(qū)別詳解,感興趣的朋友一起學(xué)習(xí)吧

先給大家說下基本概念

    在Java語言中, abstract class 和interface 是支持抽象類定義的兩種機制。正是由于這兩種機制的存在,才賦予了Java強大的 面向?qū)ο竽芰?。abstract class和interface之間在對于抽象類定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多開發(fā)者在進 行抽象類定義時對于abstract class和interface的選擇顯得比較隨意。其實,兩者之間還是有很大的區(qū)別的,對于它們的選擇甚至反映出對 于問題領(lǐng)域本質(zhì)的理解、對于設(shè)計意圖的理解是否正確、合理。

  abstract class和interface在Java語言中都是用來進行抽象類(本文 中的抽象類并非從abstract class翻譯而來,它表示的是一個抽象體,而abstract class為Java語言中用于定義抽象類的一種方法, 請讀者注意區(qū)分)定義的,那么什么是抽象類,使用抽象類能為我們帶來什么好處呢?

  在 面向?qū)ο蟮母拍钪校覀冎浪械膶ο蠖际峭ㄟ^類來描繪的,但是反過來卻不是這樣。并不是 所有的類都是用來描繪對象的(把類具體化),如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。抽象類往往用來表征我們在對問題領(lǐng)域進行分析、 設(shè)計中得出的抽象概念,是對一系列看上去不同,但是本質(zhì)上相同的具體概念的抽象。比如:如果我們進行一個圖形編輯軟件的開發(fā),就會發(fā)現(xiàn)問題領(lǐng)域存在著圓、 三角形這樣一些具體概念,它們是不同的,但是它們又都屬于形狀這樣一個概念,形狀這個概念在問題領(lǐng)域是不存在的,它就是一個抽象概念。正是因為抽象的概念 在問題領(lǐng)域沒有對應(yīng)的具體概念,所以用以表征抽象概念的抽象類是不能夠?qū)嵗摹?/p>

java開發(fā)里面經(jīng)常會用到虛函數(shù)和接口,這兩者的區(qū)別是什么呢?

abstract: 子類里面只能繼承一個父類

interface: 子類可以實現(xiàn)多個接口

那什么時候用abstract,什么時候用interface呢?

當某個子類和父類是 is a關(guān)系時,比如一個亞洲人是一個人,那么一個亞洲人的子類可以繼承一個人的父類。
當子類和父類是like a關(guān)系時,比如一個美洲超人像一個超人,超人的能力不是每個人都有的,所以不是所有人的屬性,我們不能把超能力歸于人的父類,這時就可以用interface

代碼例子:

public abstract class Man {
public abstract void eat();
} 
public interface SuperPower {
public void superPower();
}
public class AsiaMan extends Man { 
@Override
public void eat() {
System.out.println("亞洲人用筷子吃");
}
} 
public class AmericanSuperMan extends Man implements SuperPower {
public void superPower() {
System.out.println("美國超人會飛");
}
@Override
public void eat() {
System.out.println("美國人用刀叉吃");
}
}
public static void main(String[] args) {
Man anAsiaMan = new AsiaMan();
AmericanSuperMan anAmericanSuperMan = new AmericanSuperMan();
anAsiaMan.eat();
anAmericanSuperMan.eat(); 
anAmericanSuperMan.superPower();
} 

運行結(jié)果:

美國人用刀叉吃
美國超人會飛
亞洲人用筷子吃

正確的使用abstract和interface有利提高代碼可讀性,當人們看到extend時就會知道這是一個is a什么,看到implement時可以知道這個類有什么特性like a

相關(guān)文章

  • 解決Java中的java.io.IOException: Broken pipe問題

    解決Java中的java.io.IOException: Broken pipe問題

    這篇文章主要介紹了解決Java中 java.io.IOException: Broken pipe的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • springboot集成shiro詳細總結(jié)

    springboot集成shiro詳細總結(jié)

    這幾天在看 shiro,用 springboot 集成了一下,下面的這個例子中主要介紹了 shiro 的認證和授權(quán),以及鹽值加密的功能.程序可以運行起來.這里只做一個簡單的介紹,后續(xù)會針對各個功能做一個詳細的介紹,這里不做過多的贅述,需要的朋友可以參考下
    2021-05-05
  • Java連接 JDBC基礎(chǔ)知識(操作數(shù)據(jù)庫:增刪改查)

    Java連接 JDBC基礎(chǔ)知識(操作數(shù)據(jù)庫:增刪改查)

    這篇文章主要介紹了Java連接 JDBC基礎(chǔ)知識,包括操作數(shù)據(jù)庫之增刪改查操作,需要的朋友可以參考下
    2021-04-04
  • java排序高級之選擇排序?qū)崿F(xiàn)方法

    java排序高級之選擇排序?qū)崿F(xiàn)方法

    這篇文章主要介紹了java排序高級之選擇排序?qū)崿F(xiàn)方法,較為全面的分析了選擇排序的原理與具體實現(xiàn)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-02-02
  • 深入理解java.lang.String類的不可變性

    深入理解java.lang.String類的不可變性

    不可變類只是其實例不能被修改的類。每個實例中包含的所有信息都必須在創(chuàng)建該實例的時候就提供,并且在對象的整個生命周期內(nèi)固定不變,感興趣的可以了解一下
    2021-06-06
  • mybatis的Interceptor機制

    mybatis的Interceptor機制

    這篇文章主要為大家介紹了mybatis的Interceptor機制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 云計算實驗:Java?MapReduce編程

    云計算實驗:Java?MapReduce編程

    這篇文章主要介紹了云計算實驗:Java?MapReduce編程,?居于Java圍繞MapReduce編程展開詳細內(nèi)容,文章助大家掌握MapReduce編程,理解MapReduce原理,需要的朋友可以參考一下
    2021-12-12
  • Java 線程的生命周期完整實例分析

    Java 線程的生命周期完整實例分析

    這篇文章主要介紹了Java 線程的生命周期,結(jié)合完整實例形式分析了java線程周期相關(guān)的加鎖、釋放鎖、阻塞、同步等原理與操作技巧,需要的朋友可以參考下
    2019-10-10
  • ConcurrentHashMap是如何實現(xiàn)線程安全的你知道嗎

    ConcurrentHashMap是如何實現(xiàn)線程安全的你知道嗎

    這篇文章主要介紹了ConcurrentHashMap是如何實現(xiàn)線程安全的你知道嗎,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 在IntelliJ IDEA中多線程并發(fā)代碼的調(diào)試方法詳解

    在IntelliJ IDEA中多線程并發(fā)代碼的調(diào)試方法詳解

    這篇文章主要介紹了在IntelliJ IDEA中多線程并發(fā)代碼的調(diào)試方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論