继承 多态 虚函数

package hbut.jdl.qrs;

public abstract class Role {

	protected String nameString;
	protected int level;
	protected int blood;
	
	
	public String getNameString() {
		return nameString;
	}
	public void setNameString(String nameString) {
		this.nameString = nameString;
	}
	public int getLevel() {
		return level;
	}
	public void setLevel(int level) {
		this.level = level;
	}
	public int getBlood() {
		return blood;
	}
	public void setBlood(int blood) {
		this.blood = blood;
	}
	
	public abstract void fight();
	
	public String toString(){
		return String.format("(%s, %d, %d)", this.nameString,
				this.level, this.blood);
	}
	
}


package hbut.jdl.qrs;

public class SwordsMan extends Role{

	public void fight(){
		System.out.println("挥剑攻击");
	}
	
	public String toString(){
		return "剑士" + super.toString();
	}
	
}




package hbut.jdl.qrs;

public class Magician extends Role{

	public void fight(){
		System.out.println("魔法攻击");
	}
	
	public void cure(){
		System.out.println("魔法治疗");
	}
	
	public String toString(){
		return "魔法师" + super.toString();
	}
	
}



package hbut.jdl.qrs;

public class RPG {

	public static void showBlood(Role role){
		System.out.printf("%s 血量 %d%n",role.getNameString(),role.getBlood());
	}
	
	public static void drawFight(Role role){
		System.out.print(role.getNameString());
		role.fight();
	}
	
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		SwordsMan swordsMan = new SwordsMan();
		swordsMan.setNameString("Justin");
		swordsMan.setLevel(1);
		swordsMan.setBlood(200);
		System.out.println(swordsMan.toString());
		
		Magician magician = new Magician();
		magician.setNameString("Moncia");
		magician.setLevel(2);
		magician.setBlood(300);
		System.out.println(magician.toString());
		
		showBlood(swordsMan);
		showBlood(magician);
		
		drawFight(swordsMan);
		drawFight(magician);		
	}

}



JAVA中

某个类成员函数用一个虚基类作参数时,在程序中存在着子类向父类的转型,这个时候多态polymorphism就出现了,使用多态的初衷是使用单一接口操作多种类型的对象 在这个例子就是shoeBlood()这个接口,既可以操作剑士,又可以操作魔法师 这里的接口指的是对象上可操作的方法



使用继承Inherit的初衷是避免重复行为的定义,我一直搞不懂怎么去用这个特性,在本例中,所有英雄都有名字,等级和血量,他们的getters和setters可以在基类中实现,在某个类中,获得一个剑士或者魔法师,我们就可以调用Role中的方法,来获取某些特性


抽象类和抽象方法的使用初衷是表示定义不完整的类,不允许获得实例对象,虚函数配合多态







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值