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

Java中的接口和抽象類用法實例詳解

 更新時間:2015年12月21日 12:15:13   作者:李超@hicc  
這篇文章主要介紹了Java中的接口和抽象類用法,結合實例形式較為詳細的分析了Java中關于接口和抽象類的概念、定義、用法與相關注意事項,需要的朋友可以參考下

本文實例講述了Java中的接口和抽象類用法。分享給大家供大家參考,具體如下:

在面向?qū)ο蟮母拍钪?,我們知道所有的對象都是通過類來描繪的,但是并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。

抽象類往往用來表征我們在對問題領域進行分析、 設計中得出的抽象概念,是對一系列看上去不同,但是本質(zhì)上相同的具體概念的抽象,我們不能把它們實例化(拿不出一個具體的東西)所以稱之為抽象。

比如:我們要描述“水果”,它就是一個抽象,它有質(zhì)量、體積等一些共性(水果有質(zhì)量),但又缺乏特性(蘋果、橘子都是水果,它們有自己的特性),我們拿不出唯一一種能代表水果的東西(因為蘋果、橘子都不能代表水果),可用抽象類來描述它,所以抽象類是不能夠?qū)嵗摹.斘覀冇媚硞€類來具體描述“蘋果”時,這個類就可以繼承描述“水果”的抽象類,我們都知道“蘋果”是一種“水果”。

在面向?qū)ο箢I域,抽象類主要用來進行類型隱藏。我們可以構造出一個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現(xiàn)方式。這個抽象描述就是抽象類,而這一組任意個可能的具體實現(xiàn)則表現(xiàn)為這個抽象類的所有派生類。

接口和抽象類中的所有抽象方法不能有具體實現(xiàn),而應在它們的子類中實現(xiàn)所有的抽象方法(要有函數(shù)體,哪怕{ }里是空的),Java的設計者可能為抽象方法的靈活性考慮,每個子類可根據(jù)自己的需要來實現(xiàn)抽象方法。

抽象類(abstract class)的定義方式如下:

public abstract class AbstractClass //里面至少有一個抽象方法
{
  public int t; //普通數(shù)據(jù)成員
  public abstract void method1(); //抽象方法,抽象類的子類在類中必須實現(xiàn)抽象類中的抽象方法
  public abstract void method2();
  public void method3(); //非抽象方法
  public int method4();
  publi int method4 (){
    …… //抽象類中可以賦予非抽象方法方法的默認行為,即方法的具體實現(xiàn)
  }
  public void method3(){
    …… //抽象類中可以賦予非抽象方法方法的默認行為,即方法的具體實現(xiàn)
  } 
}

接口(interface)的定義方式如下:

public interface Interface
{
  static final int i; //接口中不能有普通數(shù)據(jù)成員,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員,static表示全局,final表示不可修改,可以不用static final 修飾,會隱式的聲明為static和final
  public void method1(); //接口中的方法一定是抽象方法,所以不用abstract修飾
  public void method2(); //接口中不能賦予方法的默認行為,即不能有方法的具體實現(xiàn)
}

簡言之抽象類是一種功能不全的類,接口只是一個抽象方法聲明和靜態(tài)不能被修改的數(shù)據(jù)的集合,兩者都不能被實例化。

從某種意義上說,接口是一種特殊形式的抽象類,在Java語言中抽象類表示的是一種繼承關系,一個類只能繼承繼承一個抽象類,而一個類卻可以實現(xiàn)多個接口。在許多情況下,接口確實可以代替抽象類,如果你不需要刻意表達屬性上的繼承的話。

進一步理解,關于Java引入抽象類、接口的目的,向高手請教得到的答復如下:

1、從類的層次結構上看,抽象類是在層次的頂端,但在實際的設計當中,一般來說抽象類應當是后面才會出現(xiàn)。為什么?實際上抽象類的獲取有點像數(shù)學中的提取公因式:ax+bx,x就是抽象類,如果你沒有前面的式子,你怎么知道x是不是公因式呢?在這點上,也符合人們認識世界的過程,先具體后抽象。因此在設計過程中如果你得到大量的具體概念并從當中找到其共性時,這個共性的集合就是抽象類應當是沒錯的。

2、interface從表面上看,和抽象類很相似,但用法完全不同。它的基本功能就是把一些毫不相關的類(概念)集合在一起形成一個新的、可集中操作的“新類”。我給學生的一個典型例子就是“司機”。誰可以當司機?誰都可以,只要領取了駕照。所以我不管你是學生,白領、藍領還是老板,只要有駕照就是司機。

interface DriverLicence { 
Licence getLicence(); 
}
class StudentDriver extends Student implements DriverLicence { 
} 
class WhtieCollarEmployeeDriver extends WhtieCollarEmployee implements DriverLicence { 
} 
class BlueCollarEmployeeDriver extends BlueCollarEmployee implements DriverLicence { 
} 
class BossDriver extends Boss implements Driver { 
}

當我定義了“汽車”類后,我就可以指定“司機”了。

class Car {
setDriver(DriverLicence driver);
}

這時候,Car的對象并不關心這個司機到底是干什么的,他們的唯一共同點是領取了駕照(都實現(xiàn)了DriverLicence接口)。這個,應當是接口最強大的地方也是抽象類無法比擬的。

總結:

抽象類是提取具體類的公因式,而接口是為了將一些不相關的類“雜湊”成一個共同的群體。通常我們平時養(yǎng)成良好的習慣就是多用接口,畢竟Java是單繼承,不像C++,但是在需要使用抽象類的時候一定還是要用的(有點類似goto的用法),呵呵。

希望本文所述對大家Java程序設計有所幫助。

相關文章

  • 使用spring-cache一行代碼解決緩存擊穿問題

    使用spring-cache一行代碼解決緩存擊穿問題

    本文主要介紹了使用spring-cache一行代碼解決緩存擊穿問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • Java實現(xiàn)Shazam聲音識別算法的實例代碼

    Java實現(xiàn)Shazam聲音識別算法的實例代碼

    Shazam算法采用傅里葉變換將時域信號轉(zhuǎn)換為頻域信號,并獲得音頻指紋,最后匹配指紋契合度來識別音頻。這篇文章給大家介紹Java實現(xiàn)Shazam聲音識別算法的實例代碼,需要的朋友參考下吧
    2018-09-09
  • SpringBoot靜態(tài)資源的訪問方法詳細介紹

    SpringBoot靜態(tài)資源的訪問方法詳細介紹

    最近在做SpringBoot項目的時候遇到了“白頁”問題,通過查資料對SpringBoot訪問靜態(tài)資源做了總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09
  • SpringMVC+ZTree實現(xiàn)樹形菜單權限配置的方法

    SpringMVC+ZTree實現(xiàn)樹形菜單權限配置的方法

    本篇文章主要介紹了SpringMVC+ZTree實現(xiàn)樹形菜單權限配置的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java Web基于Session的登錄實現(xiàn)方法

    Java Web基于Session的登錄實現(xiàn)方法

    這篇文章主要介紹了Java Web基于Session的登錄實現(xiàn)方法,涉及Java針對session的操作及表單提交與驗證技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • MyBatis傳入多個參數(shù)時parameterType的寫法

    MyBatis傳入多個參數(shù)時parameterType的寫法

    這篇文章主要介紹了MyBatis傳入多個參數(shù)時parameterType的寫法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • MyEclipse 2016 CI 4新增BootStrap模板

    MyEclipse 2016 CI 4新增BootStrap模板

    MyEclipse2016是一款全球使用最為廣泛的企業(yè)級開發(fā)環(huán)境程序,這篇文章主要介紹了MyEclipse 2016 CI 4新增BootStrap模板的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Java 實現(xiàn)word模板轉(zhuǎn)為pdf

    Java 實現(xiàn)word模板轉(zhuǎn)為pdf

    這篇文章主要介紹了Java 實現(xiàn)word模板轉(zhuǎn)為pdf的方法,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-02-02
  • HDFS中JAVA API的使用

    HDFS中JAVA API的使用

    HDFS是一個分布式文件系統(tǒng),既然是文件系統(tǒng),就可以對其文件進行操作,比如說新建文件、刪除文件、讀取文件內(nèi)容等操作。下面記錄一下使用JAVA API對HDFS中的文件進行操作的過程
    2017-07-07
  • Spring MVC學習筆記之json格式的輸入和輸出

    Spring MVC學習筆記之json格式的輸入和輸出

    本篇文章主要介紹了Spring MVC學習筆記之json格式的輸入和輸出,這里整理了詳細的代碼,有需要的小伙伴可以參考下。
    2017-03-03

最新評論