• 类作为成员变量类型&接口作为成员变量类型


    任何一种数据类型都是可以作为成员变量类型的

    1.类作为成员变量类型

    成员变量不仅能用基本类型,还可以用任何一种类

     可以看到FwAddressItem是一个类,可以作为成员变量类型。

     上面的Weapon就是一个类,weapon是一个对象

    调用的时候

    Hero.java

    package cn.yjg.day10.demo03;
    
    public class Hero {
        // 游戏当中英雄的角色
        private String name;   // 英雄名字
    
        private Weapon weapon;  // 武器
    
        private int age;        // 英雄年龄
    
        public Hero(){
    
        }
    
        public Hero(String name, Weapon weapon, int age) {
            this.name = name;
            this.weapon = weapon;
            this.age = age;
        }
    
        public void attack() {
            System.out.println("年龄为" + age + "的" + name +"正在用" + weapon.getCode() + "攻击对方!");
        }
    
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Weapon getWeapon() {
            return weapon;
        }
    
        public void setWeapon(Weapon weapon) {
            this.weapon = weapon;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    

    Weapon.java

    package cn.yjg.day10.demo03;
    
    public class Weapon {
        private String code;  // 武器代号
    
        public Weapon() {
    
        }
    
        public Weapon(String code) {
            this.code = code;
        }
    
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    }
    

    DemoMain.java

    package cn.yjg.day10.demo03;
    
    public class DemoMain {
    
        public static void main(String[] args) {
            // 创建一个英雄角色
            Hero hero = new Hero();
            hero.setName("盖伦");
            hero.setAge(20);
    
            Weapon weapon = new Weapon("多兰剑");
            // 为英雄配置武器
            hero.setWeapon(weapon);
    
            hero.attack();
        }
    }
    

      运行结果:

     2.接口作为成员变量类型

     Hero.java

    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() {
            System.out.println("我叫" + name + ",开始施放技能");
            skill.use();   // 调用接口中的抽象方法
            System.out.println("施放技能完成");
        }
    
        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;
        }
    }

    接口Skill

    public interface Skill {
        public abstract void use();
    }
    

     接口实现类SkillImpl.java

    public class SkillImpl implements Skill {
        @Override
        public void use() {
            System.out.println("Biu~biu~biu~~~~");
        }
    }
    

      DemoGame.java

    public class DemoGame {
        public static void main(String[] args) {
            Hero hero = new Hero();
            hero.setName("艾希");   // 设置英雄的名称
    
            // 设置英雄的技能
            hero.setSkill(new SkillImpl());  // 使用单独定义的实现类
            hero.attack();
        }
    }
    

      运行结果:

     

     不用接口实现类,使用匿名内部类

     进一步简化,同时使用匿名内部类和匿名对象

     

     3.接口作为方法的参数和返回值

     

  • 相关阅读:
    How to use Typora efficiently on Ubuntu
    数据结构,滑动窗口,双指针,LeetCode,相关题目汇总
    数据结构,LeetCode位运算相关汇总
    使用proxy解决请求跨域问题
    使用xlsx实现Excel导入
    js 将二维数组转为一维数组
    canvas 实现渐变色填充的三角形
    系统提示xxx不是内部或外部命令
    JS从字符串后面开始取值位,取子串,换行实例
    无法查看chm文件,怎么解决
  • 原文地址:https://www.cnblogs.com/GumpYan/p/13812685.html
Copyright © 2020-2023  润新知