Java--引用类型用法总结


在实际开发中,引用类型的使用非常重要,也是非常普遍的。我们可以在理解基本类型的使用方式基础上,进一步去掌握引用类型的使用方式。基本类型可以作为成员变量、作为方法的参数、作为方法的返回值,那么当然引用类型也是可以的。

Class作为成员变量

在定义一个类Role(游戏角色)时,代码如下:

class Role {
   int id; // 角色id  
   int blood; // 生命值  
   String name; // 角色名称  
}

使用int类型表示角色id和生命值,使用String类型表示姓名。此时,String本身就是引用类型,由于使用的方式类似常量,所以往往忽略了它是引用类型的存在。如果我们继续丰富这个类的定义,给Role增加武器,穿戴装备属性,将增加攻击能力:

class Weapon {
	String name;	// 武器名称
	int hurt;	// 伤害值
}

定义穿戴盔甲类,将增加防御能力,也就是提升生命值:

class Armour {
   String name;// 装备名称  
    int protect;// 防御值 
}

定义角色类:

		class Role {
		    int id;
		    int blood;
		    String name;
		    // 添加武器属性
		    Weapon wp;
		    // 添加盔甲属性
		    Armour ar;
		    // 提供get/set方法
		    public Weapon getWp() {
		        return wp;
		    }
		    public void setWeapon(Weapon wp) {
		        this.wp = wp;
		    }
		    public Armour getArmour() {
		        return ar;
		    }
		    public void setArmour(Armour ar) {
		        this.ar = ar;
		    }
		    // 攻击方法
		    public void attack(){
		        System.out.println("使用"+ wp.getName() +", 造成"+wp.getHurt()+"点伤害"); 
		    }
		    // 穿戴盔甲
		    public void wear(){
		        // 增加防御,就是增加blood值
		        this.blood += ar.getProtect();
		        System.out.println("穿上"+ar.getName()+", 生命值增加"+ar.getProtect());
		    } 
		}

测试类:
		public class Test {
		   public static void main(String[] args) {  
		     // 创建Weapon 对象     
		       Weapon wp = new Weapon("屠龙刀" , 999999);  
		       // 创建Armour 对象  
		       Armour ar = new Armour("麒麟甲",10000);  
		       // 创建Role 对象  
		       Role r = new Role();  
		       
		       // 设置武器属性  
		       r.setWeapon(wp);  
		       // 设置盔甲属性      
		       r.setArmour(ar);  
		     
		       // 攻击  
		       r.attack();  
		        // 穿戴盔甲
		       r.wear();  
		   }
	  }
	  
输出结果:
使用屠龙刀,造成999999点伤害
穿上麒麟甲 ,生命值增加10000

类作为成员变量时,对它进行赋值的操作,实际上,是赋给它该类的一个对象。

interface作为方法参数和返回值类型

当接口作为方法的参数时,需要传递什么呢?当接口作为方法的返回值类型时,需要返回什么呢?对,其实就是它的子类对象

// 会游泳的接口
interface Swimmable {
    public abstract void swimming();
}
// 会游泳的老师
class SwimTeacher implements Swimmable {
    public void swimming() {
        System.out.println("会游泳的老师");
    }
}
// 会游泳的学生
class SwimStudent implements Swimmable {
    public void swimming() {
        System.out.println("会游泳的学生");
    }
}
// 会游泳的女孩
class SwimGirl implements Swimmable {
    public void swimming() {
        System.out.println("会游泳的女孩");
    }
}
// 测试类
public class Demo09 {
    public static void main(String[] args) {
        // 获取到一个会游泳的对象
        Swimmable swim = getSwimObject();
        swim.swimming();
    }
    // 获取一个会游泳的即可
    public static Swimmable getSwimObject() {
        // 返回实现Swimmable接口的实现类即可
        // SwimTeacher ob = new SwimTeacher();
        // SwimStudent ob = new SwimStudent();
        SwimGirl ob = new SwimGirl();
              return ob;
    }
}

接口作为参数时,传递它的实现类对象。 接口作为返回值类型时,返回它的实现类对象。

发布了228 篇原创文章 · 获赞 315 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/Luojun13Class/article/details/84639999