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!");
}
}
}
输出结果: