爱玩游戏,以游戏为例
先创建一个接口:放技能: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();
就可以按照职业释放技能咧我对接口的粗浅理解,欢迎大家指教哦:
接口变量作为类的变量放在类中
按照不同的需求来指定实现方法
比如是战士就按战士的方式实现
是圣骑士就按圣骑士的方式来实现

解决方案 »

  1.   

    从思路上看的出,你已经把接口理解的很清楚了,但好像你没有去真正执行~~
       (有个小问题,就是 switch()中的控制表达式只能是整形(long除外)和字符类型,你那个字符串实现不了吧!!(我用的是if判断字符串)这是这个话题外的问题)
     
        还有一点不知道你实现没有(你这里没有具体说..)。当一个类实现一个接口的时候,必须要实现这个接口中定义的所有方法,就是你的CastPaladinSkill和CastWarriorSkill类要分别重写Cast()方法    还有这里Character onlineChar = new Character();
       既然你的人物类里含有一个构造方法需要填入一个职业,那你在创建填入一个参数不是更好?
    如:Character onlineChar = new Character("XXX职业");    总的来说,思路很好,不过要注意细节~~~~下面给出我的部分代码!
      

  2.   


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

    }
      

  3.   

    你的这种实现看着总是有些别扭,如果新增一种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();
        }
    }
      

  4.   


    如果需要一个NPC他也能释放某种技能,应该怎么样来使用接口比较好呢?