新手学习Java中,谈谈接口的一点理解,欢迎拍砖和指教

MapzChen 2011-06-09 08:06:41
爱玩游戏,以游戏为例
先创建一个接口:放技能: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();

就可以按照职业释放技能咧

我对接口的粗浅理解,欢迎大家指教哦:
接口变量作为类的变量放在类中
按照不同的需求来指定实现方法
比如是战士就按战士的方式实现
是圣骑士就按圣骑士的方式来实现
...全文
100 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
darker2015 2011-06-10
  • 打赏
  • 举报
回复

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();
}

}
chongjingsky 2011-06-10
  • 打赏
  • 举报
回复
来学习一下哦
darker2015 2011-06-10
  • 打赏
  • 举报
回复
从思路上看的出,你已经把接口理解的很清楚了,但好像你没有去真正执行~~
(有个小问题,就是 switch()中的控制表达式只能是整形(long除外)和字符类型,你那个字符串实现不了吧!!(我用的是if判断字符串)这是这个话题外的问题)

还有一点不知道你实现没有(你这里没有具体说..)。当一个类实现一个接口的时候,必须要实现这个接口中定义的所有方法,就是你的CastPaladinSkill和CastWarriorSkill类要分别重写Cast()方法

还有这里Character onlineChar = new Character();
既然你的人物类里含有一个构造方法需要填入一个职业,那你在创建填入一个参数不是更好?
如:Character onlineChar = new Character("XXX职业");

总的来说,思路很好,不过要注意细节~~~~下面给出我的部分代码!
MapzChen 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wubill 的回复:]

按接口 + 抽象适配器类 + 具体类来实现比较好
[/Quote]

如果需要一个NPC他也能释放某种技能,应该怎么样来使用接口比较好呢?
WuBill 2011-06-10
  • 打赏
  • 举报
回复
按接口 + 抽象适配器类 + 具体类来实现比较好
WuBill 2011-06-10
  • 打赏
  • 举报
回复
你的这种实现看着总是有些别扭,如果新增一种Character,还得改源代码


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();
}
}

chenchenyangll 2011-06-09
  • 打赏
  • 举报
回复
这是简单工厂设计模式

对接口的理解我也不敢说是对是错 但你设计的思路不错~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧