interface作为成员变量
接口是对方法的封装,对应游戏当中,可以看作是扩展游戏角色的技能。所以,如果想扩展更强大技能,我们在 Role 中,可以增加接口作为成员变量,来设置不同的技能。
法术接口和实现
定义接口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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); } } |
英雄角色
定义角色类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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) { // 调用接口中的抽象方法 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; } } |
定义测试类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class DemoGame { public static void main(String[] args) { //创建英雄角色 Hero hero = new Hero(); // 设置英雄的名称 hero.setName( "五虎上将关羽" ); // 设置英雄技能(使用单独定义的实现类) //hero.setSkill(new SkillImpl()); // 设置英雄技能(同时使用匿名内部类和匿名对象) hero.setSkill( new Skill() { @Override public void use(String name, String skillType) { System.out.println(name+ "使用技能:---》" +skillType); } });<img draggable= "false" role= "img" class = "emoji" alt= " src= "https://s.w.org/images/core/emoji/15.1.0/svg/1f4a5.svg" > hero.attack(hero.getName(), "烽火狼烟<img draggable=" false " role=" img " class=" emoji " alt="
" src=" https: //s.w.org/images/core/emoji/15.1.0/svg/1f4a5.svg"><img draggable="false" role="img" class="emoji" alt=" hero.attack(hero.getName(), "万箭齐发<img draggable=" false " role=" img " class=" emoji " alt="
" src=" https: //s.w.org/images/core/emoji/15.1.0/svg/1f3f9.svg"><img draggable="false" role="img" class="emoji" alt=" hero.attack(hero.getName(), "无懈可击<img draggable=" false " role=" img " class=" emoji " alt="
" src=" https: //s.w.org/images/core/emoji/15.1.0/svg/1f6e1.svg"><img draggable="false" role="img" class="emoji" alt=" } } |
执行输出如下:
五虎上将关羽使用技能:—》烽火狼烟
五虎上将关羽使用技能:—》万箭齐发
五虎上将关羽使用技能:—》无懈可击
![]()
我们使用一个接口,作为成员变量,以便随时更换技能,这样的设计更为灵活,增强了程序的扩展性。 接口作为成员变量时,对它进行赋值的操作,实际上,是赋给它该接口的一个子类对象。
interface作为方法参数和返回值类型
当接口作为方法的参数时,需要传递什么呢?当接口作为方法的返回值类型时,需要返回什么呢?对,其实都是它的子类对象。 ArrayList 类我们并不陌生,查看API我们发现,实际上,它是 java.util.List 接口的实现类。所以,当我们看见List 接口作为参数或者返回值类型时,当然可以将ArrayList 的对象进行传递或返回。 请观察如下方法:获取某集合中所有的偶数。 定义方法:
1 2 3 4 5 | public static List<integer> getEvenNum(List<integer> list) { // 创建保存偶数的集合 ArrayList<integer> evenList = new ArrayList(); // 遍历集合list,判断元素为偶数,就添加到evenList中 for ( int i = 0 ; i </integer></integer></integer> |
测试方法:
1 2 3 4 5 | public class Test { public static void main(String[] args) { // 创建ArrayList集合,并添加数字 ArrayList<integer> srcList = new ArrayList(); for ( int i = 0 ; i </integer> |
接口作为参数时,传递它的子类对象。
接口作为返回值类型时,返回它的子类对象。
以上就是Java引用类型interface的用法总结的详细内容,更多关于Java引用类型interface的资料请关注IT俱乐部其它相关文章!