一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - Java程序開發(fā)中abstract 和 interface的區(qū)別詳解

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

2020-05-21 11:21士多啤梨蘋果橙 JAVA教程

abstract class和interface在Java語言中都是用來進(jìn)行抽象類。但是兩者有什么區(qū)別呢,接下來小編給大家?guī)砹薬bstract 和 interface的區(qū)別詳解,感興趣的朋友一起學(xué)習(xí)吧

先給大家說下基本概念

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

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

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

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

abstract: 子類里面只能繼承一個(gè)父類

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

那什么時(shí)候用abstract,什么時(shí)候用interface呢?

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

代碼例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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("美國(guó)超人會(huì)飛");
}
@Override
public void eat() {
System.out.println("美國(guó)人用刀叉吃");
}
}
public static void main(String[] args) {
Man anAsiaMan = new AsiaMan();
AmericanSuperMan anAmericanSuperMan = new AmericanSuperMan();
anAsiaMan.eat();
anAmericanSuperMan.eat();
anAmericanSuperMan.superPower();
}

運(yùn)行結(jié)果:

美國(guó)人用刀叉吃
美國(guó)超人會(huì)飛
亞洲人用筷子吃

正確的使用abstract和interface有利提高代碼可讀性,當(dāng)人們看到extend時(shí)就會(huì)知道這是一個(gè)is a什么,看到implement時(shí)可以知道這個(gè)類有什么特性like a

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 175m美女被网友灌醉啪啪玩脚 | 男女爆操 | 久久精品在现线观看免费15 | 羞羞漫画视频 | 五月色综合婷婷综合俺来也 | 满溢游泳池免费土豪全集下拉版 | 国产午夜精品福利 | 婷婷在线网站 | 强制高h| 小仙夜晚慰自催眠mp3护士篇 | 亚洲国产经典 | 精品一区二区三区色花堂 | a黄毛片| 午夜网| 热伊人99re久久精品最新地 | 国产nv精品你懂得 | 好爽好粗 | 操一操影院 | 亚洲男gay同性同志 亚洲免费在线看 | 亚洲精品91 | 亚洲国产精品久久精品成人网站 | 国产视频a区| 無码一区中文字幕少妇熟女网站 | 视频免费在线 | 男人视频网站 | 九九国产在线观看 | 国产性做久久久久久 | 欧美日韩在线观看一区二区 | 亚洲国产成人在人网站天堂 | 九九影院午夜理论片无码 | 天天爱综合网 | 动漫美女人物被黄漫小说 | 日韩成人在线视频 | 4hc44四虎永久地址链接 | 日本艳鉧动漫1~6在线观看 | 99精品国产自在现线观看 | 九九精品视频一区二区三区 | 精品国产爱久久 | 欧美人伦禁忌.5 | 国产国语videosex另类 | 日本春菜花在线中文字幕 |