爱玩游戏,以游戏为例
先创建一个接口:放技能:CastSkill 接口方法:Cast();
创建一个接口的实现:放圣骑士技能:CastPaladinSkill
在建一个接口的实现:放战士技能:CastWarriorSkill
然后创建人物类Character
类字段中含有这两个:
职业:String charClass;
技能接口: CastSkill castSkill;
然后
Character的构造函数带参数String charClass
构造函数体中加入
switch(charClass){
case "圣骑士":
castSkill = new CastPaladinSkill();
break;
case "战士";
castSkill = new CastWarriorSkill();
break;
//...........等等
}然后我们实例化的人物类
Character onlineChar = new Character();
onlineChar.castSkill.Cast();
就可以按照职业释放技能咧我对接口的粗浅理解,欢迎大家指教哦:
接口变量作为类的变量放在类中
按照不同的需求来指定实现方法
比如是战士就按战士的方式实现
是圣骑士就按圣骑士的方式来实现
先创建一个接口:放技能:CastSkill 接口方法:Cast();
创建一个接口的实现:放圣骑士技能:CastPaladinSkill
在建一个接口的实现:放战士技能:CastWarriorSkill
然后创建人物类Character
类字段中含有这两个:
职业:String charClass;
技能接口: CastSkill castSkill;
然后
Character的构造函数带参数String charClass
构造函数体中加入
switch(charClass){
case "圣骑士":
castSkill = new CastPaladinSkill();
break;
case "战士";
castSkill = new CastWarriorSkill();
break;
//...........等等
}然后我们实例化的人物类
Character onlineChar = new Character();
onlineChar.castSkill.Cast();
就可以按照职业释放技能咧我对接口的粗浅理解,欢迎大家指教哦:
接口变量作为类的变量放在类中
按照不同的需求来指定实现方法
比如是战士就按战士的方式实现
是圣骑士就按圣骑士的方式来实现
(有个小问题,就是 switch()中的控制表达式只能是整形(long除外)和字符类型,你那个字符串实现不了吧!!(我用的是if判断字符串)这是这个话题外的问题)
还有一点不知道你实现没有(你这里没有具体说..)。当一个类实现一个接口的时候,必须要实现这个接口中定义的所有方法,就是你的CastPaladinSkill和CastWarriorSkill类要分别重写Cast()方法 还有这里Character onlineChar = new Character();
既然你的人物类里含有一个构造方法需要填入一个职业,那你在创建填入一个参数不是更好?
如:Character onlineChar = new Character("XXX职业"); 总的来说,思路很好,不过要注意细节~~~~下面给出我的部分代码!
public interface CastSkill {
public void Cast();//接口中的方法
}
public class CastPaSkill implements CastSkill{ @Override
public void Cast() {
System.out.println("释放圣骑士技能!");
}}
public class CastWaSkill implements CastSkill{ @Override
public void Cast() {
System.out.println("释放战士技能!!");
}}
public class Hero {
String name;
CastSkill castSkill ;
/**
* 构造方法,构造任务属性
* @param name
* @param charClass
*/
public Hero(String name,String charClass){
this.name = name;
if(charClass.equals("a")){
castSkill = new CastPaSkill();
}else if(charClass.equals("b")){
castSkill = new CastWaSkill();
}
}
}
public class Test {
public static void main(String[] args) {
Hero hero1 = new Hero("楼主","a");
Hero hero2 = new Hero("沙发","b");
System.out.print(hero1.name);
hero1.castSkill.Cast();
System.out.print(hero2.name);
hero2.castSkill.Cast();
}
}
ICastSkill.java
package com.hero;
public interface ICastSkill {
public void Cast();
}AbstractHero.java
package com.hero;
public abstract class AbstractHero implements ICastSkill {
protected String name;
public void Cast() {
System.out.println("由具体子类来重写!");
} public String getName(){
return name;
}
}
package com.hero;
public class Paladin extends AbstractHero {
public Paladin(String name){
this.name = name;
}
@Override
public void Cast() {
System.out.println("释放圣骑士技能!!");
}
}package com.hero;
public class Warrior extends AbstractHero {
public Warrior(String name){
this.name = name;
} @Override
public void Cast() {
System.out.println("释放战士技能!!");
}
}Test.java
public class Test {
public static void main(String[] args) {
AbstractHero hero = new Paladin( "paladin");
hero.Cast();
System.out.println(hero.getName());
System.out.println("------------");
hero = new Warrior("warrior");
hero.Cast();
System.out.println(hero.getName());
//如果只关心行为,就直接定义成接口
ICastSkill hero2 = new Paladin( "paladin");
hero2.Cast();
System.out.println("------------");
hero2 = new Warrior("warrior");
hero2.Cast();
}
}
如果需要一个NPC他也能释放某种技能,应该怎么样来使用接口比较好呢?