摘要:第五章接口接口概述常見(jiàn)的貓狗案例貓和狗它們僅僅提供一些基本功能。如果一個(gè)類繼承了某個(gè)抽象類,它的子類則一定是抽象類的種類,而接口實(shí)現(xiàn)則是有或者沒(méi)有具備或者不具備的關(guān)系,比如狗是否能鉆火圈,能則可以實(shí)現(xiàn)這個(gè)接口,不能就不實(shí)現(xiàn)這個(gè)接口。
第五章 接口 5.1 接口概述
常見(jiàn)的貓狗案例 貓和狗它們僅僅提供一些基本功能。
但有一些不是動(dòng)物本身就具備的,比如:貓鉆火圈,狗跳高等功能
是在后面的培養(yǎng)中訓(xùn)練出來(lái)的,這種額外的功能,java提供了接口表示。
5.2 接口特點(diǎn) A:接口用關(guān)鍵字interface表示[public] interface 接口名{ }
接口中的方法不能具體實(shí)現(xiàn),接口中的方法必須為抽象方法
接口中一般不定義變量,因?yàn)榻涌谥械淖兞繒?huì)被默認(rèn)指定為 public static final 變量(只能是)
B:類實(shí)現(xiàn)接口用implements 表示class 類名 implements 接口1,接口2,[....]{ }
1.一個(gè)類(非抽象類)可以遵循多個(gè)接口,并且需要實(shí)現(xiàn)(重寫(xiě))該接口中所有的方法
2.子類為抽象類的意義不大
5.3 接口的成員特點(diǎn)只能是常量
? 默認(rèn)修飾符:public static final
? 沒(méi)有構(gòu)造方法
? 只能是抽象的
? 默認(rèn)修飾符:public abstract
5.4 抽象類和接口的區(qū)別(重要)我們從我們實(shí)際設(shè)計(jì)場(chǎng)景中來(lái)切入這個(gè)話題
先來(lái)舉一個(gè)簡(jiǎn)單的例子:
狗都具有 eat() 、sleep() 方法,我們分別通過(guò)抽象類和接口定義這個(gè)抽象概念
//通過(guò)抽象類定義 public abstract class Dog { public abstract void eat(); public abstract void sleep(); }
//通過(guò)接口定義 public interface Dog { public abstract void eat(); public abstract void sleep(); }
但是我們現(xiàn)在如果需要讓狗擁有一項(xiàng)特殊的技能——鉆火圈 DrillFireCircle(),如何增加這個(gè)行為呢?
思考:
將鉆火圈方法與前面兩個(gè)方法一同寫(xiě)入抽象類中,但是這樣的話,但凡繼承這個(gè)抽象類狗都具有了鉆火圈技能,明顯不合適
將鉆火圈方法與前面兩個(gè)方法一同寫(xiě)入接口中,當(dāng)需要使用鉆火圈功能的時(shí)候,就必須實(shí)現(xiàn) 接口中的eat() 、sleep() 方法(重寫(xiě)該接口中所有的方法)顯然也不合適
那么該如何解決呢 ? 我們可以仔細(xì)想一想,eat和sleep都是狗本身所應(yīng)該具有的一種行為,而鉆火圈這種行為則是后天訓(xùn)練出來(lái)的,只能算是對(duì)狗類的一種附加或者延伸, 兩者不應(yīng)該在同一個(gè)范疇內(nèi),所以我們考慮將這個(gè)多帶帶的行為,獨(dú)立的設(shè)計(jì)一個(gè)接口,其中包含DrillFireCircle()方法, Dog設(shè)計(jì)為一個(gè)抽象類, 其中又包括eat() 、sleep() 方法.
一個(gè)SpecialDog即可繼承Dog類并且實(shí)現(xiàn)DrillFireCircle()接口
下面給出代碼:
//定義接口,含有鉆火圈方法 public interface DrillFireCircle() { public abstract void drillFireCircle(); } //定義抽象類狗類 public abstract class Dog { public abstract void eat(); public abstract void sleep(); } //繼承抽象類且實(shí)現(xiàn)接口 class SpecialDog extends Dog implements drillFireCircle { public void eat() { //.... } public void sleep() { //.... } public void drillFireCircle() () { //.... } }總結(jié):
繼承是一種 "是或不是"的關(guān)系,而 接口 實(shí)現(xiàn)則是 "有或沒(méi)有"的關(guān)系。如果一個(gè)類繼承了某個(gè)抽象類,它的子類則一定是抽象類的種類,而接口實(shí)現(xiàn)則是有或者沒(méi)有、具備或者不具備的關(guān)系,比如狗是否能鉆火圈,能則可以實(shí)現(xiàn)這個(gè)接口,不能就不實(shí)現(xiàn)這個(gè)接口。
結(jié)尾:如果內(nèi)容中有什么不足,或者錯(cuò)誤的地方,歡迎大家給我留言提出意見(jiàn), 蟹蟹大家 !^_^
如果能幫到你的話,那就來(lái)關(guān)注我吧!
在這里的我們素不相識(shí),卻都在為了自己的夢(mèng)而努力 ?一個(gè)堅(jiān)持推送原創(chuàng)Java技術(shù)的公眾號(hào):理想二旬不止
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/74783.html
摘要:關(guān)于抽象類和接口的初步理解什么是抽象類抽象類是指在前加了關(guān)鍵字且存在抽象方法在類方法關(guān)鍵字前加了關(guān)鍵字的類。抽象類不能被直接實(shí)例化。抽象類中只定義或部分實(shí)現(xiàn)子類需要的方法。抽象類提供了具體實(shí)現(xiàn)的標(biāo)準(zhǔn),而接口則是純粹的模板。 關(guān)于抽象類和接口的初步理解 什么是抽象類 抽象類是指在 class 前加了 abstract 關(guān)鍵字且存在抽象方法(在類方法 function 關(guān)鍵字前加了 ab...
摘要:最近在學(xué)習(xí)安全相關(guān)的一些知識(shí),目前對(duì)安全也只有了一些淺顯的理解,下面記錄我的一些理解。防御攻擊的方法主要是修改數(shù)據(jù)的接口,盡量使用請(qǐng)求使用同源策略推薦的文章安全之攻擊其實(shí)還講了其他的幾種方法,但是都沒(méi)接觸過(guò),不太理解,所以沒(méi)有寫(xiě)下來(lái)。 最近在學(xué)習(xí)web安全相關(guān)的一些知識(shí),目前對(duì)web安全也只有了一些淺顯的理解,下面記錄我的一些理解。因?yàn)閷?duì)這一塊懂的東西不是很多,有些地方可能寫(xiě)的不對(duì)或者...
摘要:前言本章我們要講解的是五大原則語(yǔ)言實(shí)現(xiàn)的第篇,依賴倒置原則。當(dāng)應(yīng)用依賴倒置原則的時(shí)候,關(guān)系就反過(guò)來(lái)了。在當(dāng)靜態(tài)類型語(yǔ)言的上下文里討論依賴倒置原則的時(shí)候,耦合的概念包括語(yǔ)義和物理兩種。依賴倒置原則和依賴注入都是關(guān)注依賴,并且都是用于反轉(zhuǎn)。 前言 本章我們要講解的是S.O.L.I.D五大原則JavaScript語(yǔ)言實(shí)現(xiàn)的第5篇,依賴倒置原則LSP(The Dependency Invers...
摘要:更多關(guān)于接口和抽象類的概念知識(shí),可自行查閱相關(guān)文檔。抽象類及其作用抽象類,顧名思義,即類的抽象。而接口是對(duì)行為的抽象,表達(dá)的是的關(guān)系。相比于抽象類,接口能最大限度的減少對(duì)外暴露的接口,并隱藏細(xì)節(jié),更符合這一原則。 showImg(https://segmentfault.com/img/bVbkOJy?w=1295&h=595); 作者:伯特出處:github.com/ruicbAnd...
閱讀 1529·2021-09-10 11:27
閱讀 2558·2019-08-30 15:53
閱讀 1439·2019-08-30 13:10
閱讀 3046·2019-08-30 11:09
閱讀 1198·2019-08-29 17:23
閱讀 726·2019-08-29 17:05
閱讀 3006·2019-08-29 15:10
閱讀 2409·2019-08-29 13:22