国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

2019-11-26 14:08:52
字體:
供稿:網(wǎng)友

先給大家說下基本概念

    在Java語言中, abstract class 和interface 是支持抽象類定義的兩種機制。正是由于這兩種機制的存在,才賦予了Java強大的 面向?qū)ο竽芰Αbstract 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ū)嵗摹?br />

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 { @Overridepublic void eat() {System.out.println("亞洲人用筷子吃");}} public class AmericanSuperMan extends Man implements SuperPower {public void superPower() {System.out.println("美國超人會飛");}@Overridepublic 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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 江门市| 景宁| 邢台市| 盱眙县| 读书| 武隆县| 太仓市| 张家界市| 宝兴县| 盖州市| 鄂托克旗| 巴南区| 宜昌市| 渭源县| 永清县| 长阳| 宁陕县| 北宁市| 蒲城县| 南陵县| 班戈县| 阿拉善右旗| 泌阳县| 松溪县| 济宁市| 云安县| 思南县| 彭山县| 宁南县| 峨边| 靖远县| 合水县| 聊城市| 科技| 贡觉县| 本溪| 西平县| 兴仁县| 平阴县| 叙永县| 咸丰县|