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

