继承、重写和自动转型

1、继承:

学生类:
    属性:姓名、学号、成绩、性别
    方法:学习
大学生类:
    属性: 姓名、学号、成绩、性别、专业
    方法:学习

继承:能够让一个(子)类拥有另一个(父)类的属性和方法。
关键字:extends
格式: public class 子类类名 extends 父类类名{ }

extends:扩展。子类是在父类的基础上,对属性或者方法进行扩展,得到的新类。

现实生活中的继承关系?
老师 —— 大学老师
食物 —— 蔬菜
水果 —— 西瓜

Object是所有其他类的父类。

2、访问权限

控制被修饰的内容,能在哪些范围使用。
在这里插入图片描述

子类继承父类,能继承哪些属性和方法?
    子类能拥有父类的所有属性和方法,但是限于访问权限,部分属性和方法不能直接使用。

3、重写和自动转型

重写:父类的方法不能满足子类的需要,则子类可以覆盖父类的方法。
要求:
    1、必须要有继承关系
    2、父类的方法,访问权限要在子类中可见。
    3、子类中,方法的访问权限不能缩小,方法的返回值类型、方法名、参数必须完全一样。

自动转型:子类对象可以自动的变为父类对象。
自动转型后,方法调用的内容以子类为准。可以使用的属性和方法,以父类为准。

练习:

夏侯惇 和 鲁班PK,采用回合制,每次攻击让对方的血量减少攻击方的攻击值,重复,直到某一方的血量小于等于0结束,胜利的一方继续和主宰PK,主宰每次攻击让对方的血量减少主宰两倍攻击值,重复,直到某一方的血量小于等于0。
输出:战斗的过程、结果
要求:每个类至多有一个攻击方法。

代码实现:

public class role {
	public String name;
	public int HP;
	public int AD;
	public int sp;
	
	public void pk(role r){
		r.HP=r.HP-AD;
		System.out.println(name+"攻击"+r.name+"造成"+AD+"伤害,"+r.name+"还剩"+r.HP+"HP");
		if(r.HP<=0){
			HP=HP+2000;
			AD=AD+150;
			System.out.println(name+"win!获得胜利者buff,HP回复2000,攻击力增加150。现攻击力为:"+AD+",HP为:"+HP+"接下来将于主宰遭遇");
		}
	}
}
public class xiahoudun extends role{

}

public class lubang extends role{
   public static void main(String[] args){
		xiahoudun xiahoudun = new xiahoudun();
		xiahoudun.name="夏侯惇";
		xiahoudun.HP=3300;
		xiahoudun.AD=200;
		xiahoudun.sp=1;
		
		lubang lubang = new lubang();
		lubang.name= "鲁班";
		lubang.HP=1500;
		lubang.AD=350;
		lubang.sp=2;
		
		zhuzai zhuzai = new zhuzai();
		zhuzai.name="主宰";
		zhuzai.HP=3300;
		zhuzai.AD=500;
		zhuzai.sp=3;
		
		while(lubang.HP>0&& xiahoudun.HP>0){
			xiahoudun.pk(lubang);
			if(lubang.HP<=0)
				break;
			lubang.pk(xiahoudun);
			} if(xiahoudun.HP<=0){
				while(lubang.HP>0&& zhuzai.HP>0){
					lubang.pk(zhuzai);
					if(zhuzai.HP<=0)
						break;
					zhuzai.pk(lubang);
				}
			 }
			else{
				while(xiahoudun.HP>0&& zhuzai.HP>0){
					xiahoudun.pk(zhuzai);
					if(zhuzai.HP<=0)
						break;
					zhuzai.pk(xiahoudun);
			 }
		}
	}
}

public class zhuzai extends role{
	public void pk(role r){
		r.HP=r.HP-AD;
		System.out.println(name+"攻击"+r.name+"造成"+AD+"伤害,"+r.name+"还剩"+r.HP+"HP");
		if(r.HP<=0){
			System.out.println(name+"win!");
		}
	}
}

输出结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值