1、使用继承的原因
·提高代码的重用性
·提高程序的扩展性
2、JAVA继承的语法格式
public class 类名(子类、派生类、超类) extends 类名(父类、基类){
//程序
}
【提醒:Java中类的继承是单继承,子类只能继承一个父类】
现实中可以写为继承的关系举例:
· 包含关系: 水果<--西瓜/菠萝/桃子……
· 亲子关系: 双亲<--子女
3、子类从父类中继承的内容:
子类继承了父类的所有属性和方法
访问修饰符:限定用户的属性和方法在不同范围下能否使用的标识
访问修饰符 | 同类中 | 同包中 | 不同包中 | 不同包但是有继承关系的子类中 |
private | 可以 | 不可以 | 不可以 | 不可以 |
默认 | 可以 | 可以 | 不可以 | 不可以 |
protected | 可以 | 可以 | 不可以 | 可以 |
public | 可以 | 可以 | 可以 | 可以 |
【子类可以定义父类中没有的属性和方法】
4、方法重写
· 生活中需要方法重写的情况:
定义运动器材的使用方法,杠铃、羽毛球、网球、足球……的使用方法与运动器材的使用方法是不一样的。
这时,我们需要在子类中进行方法重写。
· 方法重写条件:
a.必须存在继承关系
b.子类重写方法时的访问修饰符必须要大于或者等于父类方法的访问修饰符
c.子类重写方法时,方法的返回值类型,方法名,参数必须要和父类的完全一致
` 怎样调用重写后的方法
调用子类中重写后的方法
【类名1 对象名 = new 类名2(),对象类型以new后面的类名2为主】
5、练习
回合制对战游戏:奥特曼A和小怪兽A进行战斗,直到一方的血量为0时结束战斗,输出谁胜利了!
如果奥特曼A胜利,则奥特曼A和奥特曼B进行战斗,直到一方的血量为0时结束战斗,输出谁胜利了!
如果小怪兽A胜利,则小怪兽A和小怪兽B进行战斗,直到一方的血量为0时结束战斗,输出谁胜利了!
【 要求:类中只能出现一个战斗的方法,参数只能有一个】
Role类:
public class Role {
public String name;
public int blood=100;
public int power;
public String state;
public int hurt(int power){
blood-=power;
return blood;
}
}
ATM类:
public class ATM extends Role{
public int power=8;
}
Monster类:
public class Monster extends Role{
public int power=6;
}
Fight类:
public class Fight {
public static void main(String[] args){
ATM atm= new ATM();
ATM atm2= new ATM();
Monster mon= new Monster();
Monster mon2= new Monster();
System.out.println("第1轮回合,正在进行——");
System.out.println("ATM1 PK monster1");
while(atm.blood>0 && mon.blood>0){
mon.hurt(atm.power);
System.out.println("Monster1 lost blood:"+atm.power);
atm.hurt(mon.power);
System.out.println("ATM1 lose blood:"+mon.power);
}
if(atm.blood>mon.blood)
{
System.out.println("第1轮回合,"+"ATM1胜利!");
System.out.println("第2轮回合,正在进行——");
System.out.println("ATM1 PK ATM2");
while(atm.blood>0 && atm2.blood>0){
atm2.hurt(atm.power);
System.out.println("ATM2 lose blood"+atm.power);
atm.hurt(atm2.power);
System.out.println("ATM1 lose blood"+atm2.power);
}
if(atm.blood>atm2.blood)
System.out.println("第2轮回合,"+"ATM1胜利!");
else
System.out.println("第2轮回合,"+"ATM1胜利!");
}
else
{
System.out.println("第1轮回合,"+"ATM1胜利!");
System.out.println("第2轮回合,正在进行——");
System.out.println("monster1 PK monster2");
while(mon.blood>0 && mon2.blood>0){
mon2.hurt(mon.power);
System.out.println("monster2 lose blood"+mon.power);
mon.hurt(mon2.power);
System.out.println("monster1 lose blood"+mon2.power);
}
if(mon.blood>mon2.blood)
System.out.println("第2轮回合,"+"monster1胜利!");
else
System.out.println("第2轮回合,"+"monster2胜利!");
}
}
}