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