Java引用類型interface的用法總結(jié)
interface作為成員變量
接口是對方法的封裝,對應(yīng)游戲當(dāng)中,可以看作是擴(kuò)展游戲角色的技能。所以,如果想擴(kuò)展更強(qiáng)大技能,我們在 Role 中,可以增加接口作為成員變量,來設(shè)置不同的技能。
法術(shù)接口和實(shí)現(xiàn)
定義接口:
public interface Skill {
/**
* 釋放技能的抽象方法
* @param name 英雄
* @param skillType 技能類型
*/
void use(String name,String skillType);
}
public class SkillImpl implements Skill {
@Override
public void use(String name,String skillType) {
System.out.println(name+"使用技能:---》"+skillType);
}
}英雄角色
定義角色類:
public class Hero {
private String name; // 英雄的名稱
private Skill skill; // 英雄的技能
public Hero() {
}
public Hero(String name, Skill skill) {
this.name = name;
this.skill = skill;
}
public void attack(String name,String skillType) {
// 調(diào)用接口中的抽象方法
skill.use(name,skillType);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Skill getSkill() {
return skill;
}
public void setSkill(Skill skill) {
this.skill = skill;
}
}定義測試類:
public class DemoGame {
public static void main(String[] args) {
//創(chuàng)建英雄角色
Hero hero = new Hero();
// 設(shè)置英雄的名稱
hero.setName("五虎上將關(guān)羽");
// 設(shè)置英雄技能(使用單獨(dú)定義的實(shí)現(xiàn)類)
//hero.setSkill(new SkillImpl());
// 設(shè)置英雄技能(同時使用匿名內(nèi)部類和匿名對象)
hero.setSkill(new Skill() {
@Override
public void use(String name, String skillType) {
System.out.println(name+"使用技能:---》"+skillType);
}
});??
hero.attack(hero.getName(),"烽火狼煙??????");
hero.attack(hero.getName(),"萬箭齊發(fā)??????");
hero.attack(hero.getName(),"無懈可擊?????????");
}
}執(zhí)行輸出如下:
五虎上將關(guān)羽使用技能:---》烽火狼煙?????? 五虎上將關(guān)羽使用技能:---》萬箭齊發(fā)?????? 五虎上將關(guān)羽使用技能:---》無懈可擊?????????
我們使用一個接口,作為成員變量,以便隨時更換技能,這樣的設(shè)計(jì)更為靈活,增強(qiáng)了程序的擴(kuò)展性。 接口作為成員變量時,對它進(jìn)行賦值的操作,實(shí)際上,是賦給它該接口的一個子類對象。
interface作為方法參數(shù)和返回值類型
當(dāng)接口作為方法的參數(shù)時,需要傳遞什么呢?當(dāng)接口作為方法的返回值類型時,需要返回什么呢?對,其實(shí)都是它的子類對象。 ArrayList 類我們并不陌生,查看API我們發(fā)現(xiàn),實(shí)際上,它是 java.util.List 接口的實(shí)現(xiàn)類。所以,當(dāng)我們看見List 接口作為參數(shù)或者返回值類型時,當(dāng)然可以將ArrayList 的對象進(jìn)行傳遞或返回。 請觀察如下方法:獲取某集合中所有的偶數(shù)。 定義方法:
public static List<Integer> getEvenNum(List<Integer> list) {
// 創(chuàng)建保存偶數(shù)的集合
ArrayList<Integer> evenList = new ArrayList<>();
// 遍歷集合list,判斷元素為偶數(shù),就添加到evenList中
for (int i = 0; i < list.size(); i++) {
Integer integer = list.get(i);
if (integer % 2 == 0) {
evenList.add(integer);
}
}
/**
返回偶數(shù)集合
因?yàn)間etEvenNum方法的返回值類型是List,而ArrayList是List的子類,
所以evenList可以返回
*/
return evenList;
}測試方法:
public class Test {
public static void main(String[] args) {
// 創(chuàng)建ArrayList集合,并添加數(shù)字
ArrayList<Integer> srcList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
srcList.add(i);
}
/**
獲取偶數(shù)集合
因?yàn)間etEvenNum方法的參數(shù)是List,而ArrayList是List的子類,
所以srcList可以傳遞
*/
List list = getEvenNum(srcList);
System.out.println(list);
}
}
接口作為參數(shù)時,傳遞它的子類對象。
接口作為返回值類型時,返回它的子類對象。
以上就是Java引用類型interface的用法總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Java引用類型interface的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決使用@Component會導(dǎo)致spring.factories中的EnableAutoConfiguration無效
這篇文章主要介紹了解決使用@Component會導(dǎo)致spring.factories中的EnableAutoConfiguration無效問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03
Java的深拷貝與淺拷貝的幾種實(shí)現(xiàn)方式
這篇文章主要介紹了Java的深拷貝與淺拷貝的幾種實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
SpringBoot2零基礎(chǔ)到精通之映射與常用注解請求處理
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)映射、常用注解和方法參數(shù)的小技巧2022-03-03
微服務(wù)實(shí)戰(zhàn)之怎樣提升springboot服務(wù)吞吐量
這篇文章主要介紹了微服務(wù)實(shí)戰(zhàn)之怎樣提升springboot服務(wù)吞吐量方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
使用jenkins+maven+git發(fā)布jar包過程詳解
這篇文章主要介紹了使用jenkins+maven+git發(fā)布jar包過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
springboot+dubbo+zookeeper的簡單實(shí)例詳解
本文主要介紹了springboot+dubbo+zookeeper的簡單實(shí)例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10

