一篇文章帶你了解java接口與繼承
JAVA接口的概念
官方解釋?zhuān)篔ava接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒(méi)有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類(lèi)實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為(功能)。
我的理解:在類(lèi)中,方法是具體的,通過(guò)接口我們可以將具體的方法抽象化。比如在動(dòng)物類(lèi)中有吃的動(dòng)作,不同的動(dòng)物吃不同的食物,食肉食草等,通過(guò)接口我們可以對(duì)不同的動(dòng)物調(diào)用不同的接口方法。
接口的代碼實(shí)現(xiàn)
定義關(guān)鍵字:interface
public interface 接口名{
//里面不可以有具體的方法體?。?!
}
實(shí)現(xiàn) 關(guān)鍵字: implements
public class 類(lèi)名 implements 接口名,接口名2{
//在這里重寫(xiě)接口中的抽象方法
}
舉個(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();//抽象方法 沒(méi)有方法體
}
//寫(xiě)方法
public class xiaoming_tobeijing implements waytoBeiJing{
//重寫(xiě)去北京的方法
@Override
public void WaytoBeiJing(){
System.out.println("乘坐飛機(jī)");
}
//一個(gè)類(lèi)中只能有一個(gè)方法 可以再次創(chuàng)建一個(gè)類(lèi) 寫(xiě)第二種方法
}
結(jié)果:
乘坐飛機(jī)
Process finished with exit code 0
注意事項(xiàng)
1.接口不能被實(shí)例化。
2.接口中所有方法不能有主體。
3.一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。
4.接口可以有變量,但一定是public static final 修飾,就算你不寫(xiě),JVM也會(huì)默認(rèn)是這個(gè)。
5.接口中的方法只能是public修飾。
6.一個(gè)接口不能繼承其他類(lèi),但是可以繼承別的接口。
Java繼承
什么是繼承:
繼承就是子類(lèi)繼承父類(lèi)的特征和行為,使得子類(lèi)對(duì)象(實(shí)例)具有父類(lèi)的實(shí)例域和方法,或子類(lèi)從父類(lèi)繼承方法,使得子類(lèi)具有父類(lèi)相同的行為。 為什么要用繼承:可以去掉重復(fù)代碼,方便后期維護(hù)
舉個(gè)列子,大家應(yīng)該都玩過(guò)英雄聯(lián)盟,每個(gè)英雄都是一個(gè)類(lèi),如果說(shuō)不用繼承的話(huà)每次都要重復(fù)定義每個(gè)英雄的成員屬性,如下圖我舉了一個(gè)MF,一個(gè)EZ的列子
public class MissFortune {
// 成員
// 屬性
String nameID;
int hp;
int ad;
int ap;
int lv;// 人物等級(jí)
// 技能等級(jí)
int q_lv;
}
public class Ezreal {
// 成員
// 屬性
String nameID;
int hp;
int ad;
int ap;
int lv;// 人物等級(jí)
// 技能等級(jí)
int q_lv;
}
這樣就創(chuàng)建了兩個(gè)單獨(dú)獨(dú)立的英雄類(lèi),可以發(fā)現(xiàn)前半部分代碼都是重復(fù)的,下面我們用繼承來(lái)看一下
首先創(chuàng)建一個(gè)父類(lèi):
public class Hero {
// 成員
// 屬性
String nameID;
int hp;
int ad;
int ap;
int lv;// 人物等級(jí)
// 技能等級(jí)
int q_lv;
}
然后再看我們的單獨(dú)英雄類(lèi):
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;
}
}
在此之中,父類(lèi)的屬性和方法 子類(lèi)都可以繼承到并 直接調(diào)用,簡(jiǎn)潔了代碼,后期維護(hù)的過(guò)程中也不容易出錯(cuò)
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SpringBoot如何接收Post請(qǐng)求Body里面的參數(shù)
這篇文章主要介紹了SpringBoot如何接收Post請(qǐng)求Body里面的參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
詳解springboot和vue前后端分離開(kāi)發(fā)跨域登陸問(wèn)題
這篇文章主要介紹了詳解springboot和vue前后端分離開(kāi)發(fā)跨域登陸問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
詳解MybatisPlus中@TableLogic注解的使用
@TableLogic一般用于實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)邏輯刪除,本文我們將介紹 @TableLogic 注解的用法,以及每個(gè)屬性的實(shí)際意義和用法,感興趣的可以了解一下2022-06-06
使用ClassFinal實(shí)現(xiàn)SpringBoot項(xiàng)目jar包加密的操作指南
在實(shí)際開(kāi)發(fā)中,保護(hù)項(xiàng)目的安全性和保密性是至關(guān)重要的,針對(duì)于 Spring Boot 項(xiàng)目,我們需要將 JAR 包進(jìn)行加密從而有效地防止未經(jīng)授權(quán)的訪(fǎng)問(wèn)和修改,本文將介紹如何使用ClassFinal在 Spring Boot 項(xiàng)目中實(shí)現(xiàn) JAR 包加密,需要的朋友可以參考下2024-06-06
mybatis-plus實(shí)現(xiàn)四種lambda表達(dá)式方式
使用了lambda表達(dá)式 可以通過(guò)方法引用的方式來(lái)使用實(shí)體字段名的操作,本文主要介紹了mybatis-plus實(shí)現(xiàn)四種lambda表達(dá)式方式,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06

