在第一节课我们模拟了钢铁侠与美队互掐的过程,随着复联3 的上映,戴着无限手套的灭霸啜啜啜上场了,在宇宙英雄们喋血沙场之后,我们得面对一个残酷的问题——该如何打败灭霸,出任CEO,迎娶白富美,走上人生巅峰…….
不,,,,应该是如何维护宇宙的和平呢?
当然是依靠我们代码的力量!
在正式上场之前,我们先来模拟一下灭霸与我方的战斗(否则连一个响指都接不住,岂不是很尴尬)
嗯,开始愉快的创建对象,创建方法体,开始调用方法,开始 STOP
咦?灭霸只是攻击力强了一些,如果我们改一下其他英雄的战斗方法,直接copy岂不是不用上述N多步。
打开Goolge搜索一下,没错,这种方法叫做 继承
1.继承
1.1继承意味着派生类中无须重新定义在父类中已经定义的属性和行为,而是自动地、隐含地拥有其父类的全部属性与行为。继承机制允许和鼓励类的重用,派生类既具有自己新定义的属性和行为,又具有继承下来的属性和行为。
1.2关键字:extends
1.3格式:public class 子类名 extends 父类名{ }
1.4子类继承父类能继承哪些内容?
子类拥有父类所有的属性和方法。但是由于访问权限,部分属性和方法不能直接使用。
这里的访问权限就是关键字public,除了public还有protected,缺省,和private。public权限最高可以在所有情况下使用,而权限最低的private只能在当前类中使用。当继承后报错时,就要考虑一下是否是父类和子类的权限差别了。
1.5方法的重写
若是父类的方法无法满足子类的需求时,比如:同样是烹饪,煎牛排和黄焖牛肉所需的火候,时间,温度,作料都不一样,这时我们就要考虑方法的重写了。
在重写中有两点要求:
1.5.1.必须是继承关系
1.5.2方法的声明必须一致,包括方法的访问权限,方法名,返回值类型等等
2. 灭霸来了
掌握了继承和重写,灭霸也敲着响指来了。
练习:
钢铁侠 和 美国对长, 灭霸
钢铁侠 和 美国队长PK,采用回合制,每次攻击让对方的血量减少攻击方的攻击值,直到某一方的血量小于等于0结束,
胜利的一方,继续和灭霸PK,灭霸每次攻击让对方的血量减少灭霸的两倍攻击值,重复,直到某一方的血量小于等于0结束,输出胜利方。
小伙伴试着联系一下,参考代码如下:
package Extend;
public class Captain extends SuperMan{
public static void main(String[] args){
//创建美队的对象,对属性赋值
Captain cap=new Captain();
cap.name="美国队长";
cap.CE=16;
cap.HP=150;
//创建钢铁侠的对象,对属性赋值
Iron ir=new Iron();
ir.name="钢铁侠";
ir.CE=20;
ir.HP=100;
while(cap.HP>0||ir.HP>0){
cap.fight(ir);
ir.fight(cap);
// 判断对方是否死了
if (ir.HP <= 0) {
// 击败对方
System.out.println(ir.name + "已经死亡," + cap.name + "获胜,请开始下局比赛");
break;
}
if (cap.HP <= 0) {
// 击败对方
System.out.println(cap.name + "已经死亡," + ir.name + "获胜,请开始下局比赛");
break;
}
}
//创建灭霸的对象,对属性赋值
Thanos tos=new Thanos();
tos.name="灭霸";
tos.CE=17;
tos.HP=80;
if(ir.HP>0)
{
System.out.println("/n开始第二局比赛/n"+ir.name+"PK"+tos.name);
ir.HP=100;
while(ir.HP>0||tos.HP>0){
ir.fight(tos);
// 判断对方是否死了
if (tos.HP <= 0) {
// 击败对方
System.out.println(tos.name + "已经死亡," + ir.name + "获胜,请开始下局比赛");
break;
}
tos.fight(ir);
if (ir.HP <= 0) {
// 击败对方
System.out.println(ir.name + "已经死亡," + tos.name + "获胜,请开始下局比赛");
break;
}
}
}
if(cap.HP>0)
{
System.out.println("\n"+"开始第二局比赛:"+cap.name+"PK"+"\n"+tos.name);
cap.HP=150;
while(cap.HP>0||tos.HP>0){
cap.fight(tos);
// 判断对方是否死了
if (tos.HP <= 0) {
// 击败对方
System.out.println(tos.name + "已经死亡," + cap.name + "获胜,请开始下局比赛");
break;
}
if (cap.HP <= 0) {
// 击败对方
System.out.println(cap.name + "已经死亡," + tos.name + "获胜,请开始下局比赛");
break;
}
tos.fight(cap);
}
}
}
}
继承:
package Extend;
public class Iron extends SuperMan{
}
方法:
package Extend;
public class SuperMan {
// 姓名,攻击值,血量属性
public String name;
public int CE;
public int HP;
// 战斗方法
public void fight(SuperMan sup) {
// 让一号,二号血量减少对方攻击值
sup.HP = sup.HP - CE;
// 输出 一号被攻击了,一号血量减少多少
System.out.println(sup.name + "被攻击,血量减少" + CE + ".血量还剩:" + sup.HP);
}
}
重写:
package Extend;
public class SuperMan {
// 姓名,攻击值,血量属性
public String name;
public int CE;
public int HP;
// 战斗方法
public void fight(SuperMan sup) {
// 让一号,二号血量减少对方攻击值
sup.HP = sup.HP - CE;
// 输出 一号被攻击了,一号血量减少多少
System.out.println(sup.name + "被攻击,血量减少" + CE + ".血量还剩:" + sup.HP);
}
}