一篇文章帶你了解java接口與繼承
JAVA接口的概念
官方解釋:Java接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為(功能)。
我的理解:在類中,方法是具體的,通過接口我們可以將具體的方法抽象化。比如在動(dòng)物類中有吃的動(dòng)作,不同的動(dòng)物吃不同的食物,食肉食草等,通過接口我們可以對不同的動(dòng)物調(diào)用不同的接口方法。
接口的代碼實(shí)現(xiàn)
定義關(guān)鍵字:interface
public interface 接口名{ //里面不可以有具體的方法體?。?! }
實(shí)現(xiàn) 關(guān)鍵字: implements
public class 類名 implements 接口名,接口名2{ //在這里重寫接口中的抽象方法 }
舉個(gè)列子
小明從南京去北京的方法
public class xiaoming { public void WaytoBeiJing(waytoBeiJing wtbj){ wtbj.WaytoBeiJing(); } public static void main(String[] args) { xiaoming Xiaoming = new xiaoming(); xiaoming_tobeijing xm_tbj = new xiaoming_tobeijing(); Xiaoming.WaytoBeiJing(xm_tbj); } } // 定義接口 public interface waytoBeiJing { public void WaytoBeiJing();//抽象方法 沒有方法體 } //寫方法 public class xiaoming_tobeijing implements waytoBeiJing{ //重寫去北京的方法 @Override public void WaytoBeiJing(){ System.out.println("乘坐飛機(jī)"); } //一個(gè)類中只能有一個(gè)方法 可以再次創(chuàng)建一個(gè)類 寫第二種方法 } 結(jié)果: 乘坐飛機(jī) Process finished with exit code 0
注意事項(xiàng)
1.接口不能被實(shí)例化。
2.接口中所有方法不能有主體。
3.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。
4.接口可以有變量,但一定是public static final 修飾,就算你不寫,JVM也會(huì)默認(rèn)是這個(gè)。
5.接口中的方法只能是public修飾。
6.一個(gè)接口不能繼承其他類,但是可以繼承別的接口。
Java繼承
什么是繼承:
繼承就是子類繼承父類的特征和行為,使得子類對象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。 為什么要用繼承:可以去掉重復(fù)代碼,方便后期維護(hù)
舉個(gè)列子,大家應(yīng)該都玩過英雄聯(lián)盟,每個(gè)英雄都是一個(gè)類,如果說不用繼承的話每次都要重復(fù)定義每個(gè)英雄的成員屬性,如下圖我舉了一個(gè)MF,一個(gè)EZ的列子
public class MissFortune { // 成員 // 屬性 String nameID; int hp; int ad; int ap; int lv;// 人物等級 // 技能等級 int q_lv; }
public class Ezreal { // 成員 // 屬性 String nameID; int hp; int ad; int ap; int lv;// 人物等級 // 技能等級 int q_lv; }
這樣就創(chuàng)建了兩個(gè)單獨(dú)獨(dú)立的英雄類,可以發(fā)現(xiàn)前半部分代碼都是重復(fù)的,下面我們用繼承來看一下
首先創(chuàng)建一個(gè)父類:
public class Hero { // 成員 // 屬性 String nameID; int hp; int ad; int ap; int lv;// 人物等級 // 技能等級 int q_lv; }
然后再看我們的單獨(dú)英雄類:
public class MissFortune extends Hero{ // 成員方法 // 初始化 public void initMissFortune(){ hp=570; ad=52; ap=0; lv=1; q_lv=1; } }
public class Ezreal extends Hero { // 成員方法 // 初始化 public void initEzreal(){ hp=530; ad=60; ap=0; lv=1; q_lv=1; } }
在此之中,父類的屬性和方法 子類都可以繼承到并 直接調(diào)用,簡潔了代碼,后期維護(hù)的過程中也不容易出錯(cuò)
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
如何在spring boot中進(jìn)行參數(shù)校驗(yàn)示例詳解
這篇文章主要介紹了如何在spring-boot中進(jìn)行參數(shù)校驗(yàn)及l(fā)ombok的使用詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05ThreadLocal使用案例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了ThreadLocal使用案例分析,需要的朋友可以參考下2017-08-08mybatis-plus的自動(dòng)填充時(shí)間的問題(添加到數(shù)據(jù)庫的時(shí)間比當(dāng)前時(shí)間多4個(gè)小時(shí))
這篇文章主要介紹了mybatis-plus的自動(dòng)填充時(shí)間的問題(添加到數(shù)據(jù)庫的時(shí)間比當(dāng)前時(shí)間多4個(gè)小時(shí)),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09spring boot教程之產(chǎn)生的背景及其優(yōu)勢
這篇文章主要介紹了spring boot教程之產(chǎn)生的背景及其優(yōu)勢的相關(guān)資料,需要的朋友可以參考下2022-08-08淺談一下RabbitMQ、Kafka和RocketMQ消息中間件對比
這篇文章主要介紹了淺談一下RabbitMQ、Kafka和RocketMQ消息中間件對比,消息中間件屬于分布式系統(tǒng)中一個(gè)字系統(tǒng),關(guān)注于數(shù)據(jù)的發(fā)送和接收,利用高效可靠的異步信息傳遞機(jī)制對分布式系統(tǒng)中的其余各個(gè)子系統(tǒng)進(jìn)行集成,需要的朋友可以參考下2023-05-05Spring?Security?過濾器注冊脈絡(luò)梳理
這篇文章主要介紹了Spring?Security過濾器注冊脈絡(luò)梳理,Spring?Security在Servlet的過濾鏈中注冊了一個(gè)過濾器FilterChainProxy,它會(huì)把請求代理到Spring?Security自己維護(hù)的多個(gè)過濾鏈,每個(gè)過濾鏈會(huì)匹配一些URL,如果匹配則執(zhí)行對應(yīng)的過濾器2022-08-08JDK動(dòng)態(tài)代理之ProxyGenerator生成代理類的字節(jié)碼文件解析
這篇文章主要為大家詳細(xì)介紹了JDK動(dòng)態(tài)代理之ProxyGenerator生成代理類的字節(jié)碼文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02