亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的接口和抽象類用法實(shí)例詳解

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

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

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

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

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

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

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

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

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

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

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

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

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

進(jìn)一步理解,關(guān)于Java引入抽象類、接口的目的,向高手請(qǐng)教得到的答復(fù)如下:

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

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

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 { 
}

當(dāng)我定義了“汽車”類后,我就可以指定“司機(jī)”了。

class Car {
setDriver(DriverLicence driver);
}

這時(shí)候,Car的對(duì)象并不關(guān)心這個(gè)司機(jī)到底是干什么的,他們的唯一共同點(diǎn)是領(lǐng)取了駕照(都實(shí)現(xiàn)了DriverLicence接口)。這個(gè),應(yīng)當(dāng)是接口最強(qiáng)大的地方也是抽象類無法比擬的。

總結(jié):

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

希望本文所述對(duì)大家Java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java利用樸素貝葉斯分類算法實(shí)現(xiàn)信息分類

    Java利用樸素貝葉斯分類算法實(shí)現(xiàn)信息分類

    貝葉斯分類算法是統(tǒng)計(jì)學(xué)的一種分類方法,它是一類利用概率統(tǒng)計(jì)知識(shí)進(jìn)行分類的算法。本文將利用樸素貝葉斯分類算法實(shí)現(xiàn)信息分類,需要的可以參考一下
    2022-06-06
  • 通過Spring Security魔幻山谷講解獲取認(rèn)證機(jī)制核心原理

    通過Spring Security魔幻山谷講解獲取認(rèn)證機(jī)制核心原理

    這篇文章主要介紹了通過Spring Security魔幻山谷講解獲取認(rèn)證機(jī)制核心原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java實(shí)現(xiàn)五子棋AI算法

    Java實(shí)現(xiàn)五子棋AI算法

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)五子棋AI算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Mybatis從3.4.0版本到3.5.7版本的迭代方法實(shí)現(xiàn)

    Mybatis從3.4.0版本到3.5.7版本的迭代方法實(shí)現(xiàn)

    本文主要介紹了Mybatis從3.4.0版本到3.5.7版本的迭代方法實(shí)現(xiàn),包括主要的功能增強(qiáng)、不兼容的更改和修復(fù)的錯(cuò)誤,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • springboot整合swagger3報(bào)Unable to infer base url錯(cuò)誤問題

    springboot整合swagger3報(bào)Unable to infer base&nbs

    這篇文章主要介紹了springboot整合swagger3報(bào)Unable to infer base url錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Commons beanutils組件簡(jiǎn)介

    Commons beanutils組件簡(jiǎn)介

    這篇文章主要介紹了commons beanutils組件的相關(guān)內(nèi)容,以及部分實(shí)例和基本用法,需要的朋友可以參考下
    2017-09-09
  • Java AOP實(shí)現(xiàn)自定義滑動(dòng)窗口限流器方法詳解

    Java AOP實(shí)現(xiàn)自定義滑動(dòng)窗口限流器方法詳解

    這篇文章主要介紹了Java AOP實(shí)現(xiàn)自定義滑動(dòng)窗口限流器方法,其中滑動(dòng)窗口算法彌補(bǔ)了計(jì)數(shù)器算法的不足,滑動(dòng)窗口算法把間隔時(shí)間劃分成更小的粒度,當(dāng)更小粒度的時(shí)間間隔過去后,把過去的間隔請(qǐng)求數(shù)減掉,再補(bǔ)充一個(gè)空的時(shí)間間隔,需要的朋友可以參考下
    2022-07-07
  • Java多線程導(dǎo)致CPU占用100%解決及線程池正確關(guān)閉方式

    Java多線程導(dǎo)致CPU占用100%解決及線程池正確關(guān)閉方式

    1000萬表數(shù)據(jù)導(dǎo)入內(nèi)存數(shù)據(jù)庫(kù),按分頁(yè)大小10000查詢,多線程,15條線程跑,最后發(fā)現(xiàn)CPU占用100%卡死,那么如何解決,本文就來介紹一下,感興趣的朋友可以了解一下
    2021-05-05
  • Java中Instant的使用及轉(zhuǎn)換

    Java中Instant的使用及轉(zhuǎn)換

    Instant是java.time包中的一個(gè)類,本文主要介紹了Java中Instant的使用及轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • javafx 如何將項(xiàng)目打包為 Windows 的可執(zhí)行文件exe

    javafx 如何將項(xiàng)目打包為 Windows 的可執(zhí)行文件exe

    文章介紹了三種將JavaFX項(xiàng)目打包為.exe文件的方法:方法1使用jpackage(適用于JDK14及以上版本),方法2使用Launch4j(適用于所有JDK版本),方法3使用InnoSetup(用于創(chuàng)建安裝包),每種方法都有其特點(diǎn)和適用范圍,可以根據(jù)項(xiàng)目需求選擇合適的方法,感興趣的朋友一起看看吧
    2025-01-01

最新評(píng)論