子类和父类的关系
就像名字一样,儿子会继承父亲的东西。(子类会继承父类的结构)
也像这层血缘关系一样,儿子只能有一个父亲,但父亲可以有几个儿子。(子类只有一个父类,但父类可以有多个子类)
在编码中,只要是类与类,其实都可以产生继承关系,不在乎谁属性方法的多和少,只不过为了程序的可读性和逻辑,就使用了子类与父类的命名。
为什么要使用继承?
在原有的基础上,进行扩充,并且还能可以减少代码的重复。
继承的规则
子类可以继承父类中的方法。
子类和父类可以具有同名的方法和属性。
子类能够重写父类中的方法(重写需要先继承,即要存在父类),可以使用自己的方法,不使用父类方法。
关于子类父类的转型
何时自动转型?何时强制转型?
思考这这两个问题即可,苹果是水果吗?水果是苹果吗?
可从代码旁的三角判断,是否存在重写。
关于继承的格式:public class 子类 extends父类{ 方法 }
练习
模拟:英雄损血反馈,并判断输赢。
思路:英雄有名字,血量,攻击力属性,存在后羿,鲁班2个英雄,可以当做有2个子类,那么即可创造一个“角色”类来作为父类,损血反馈可以写入子类,判定可以写入主函数。
父类
public class Juese {
public String name;
public int attack;
public int blood;
public void Fankui(Luban b) {
System.out.println("Hello!");
}
public void Fankui(Houyi a) {
}
}
这里我再父类中随意定义损血反馈方法,以便之后验证子类重写生效。
子类
后羿
public class Houyi extends Juese {
public void Fankui(Luban b) {
blood+= -b.attack;
System.out.println(name+"遭到了"+b.name+"的攻击,受到了"+b.attack+"伤害,剩余血量"+blood);
}
}
鲁班
public class Luban extends Juese {
public void Fankui(Houyi a) {
blood+= -a.attack;
System.out.println(name+"遭到了"+a.name+"的攻击,受到了"+a.attack+"伤害,剩余血量"+blood);
}
}
两个英雄作为子类,添加重写的损血反馈方法。
主函数
public class Manage {
public static void main(String[] args) { //属性
Houyi hou = new Houyi();
hou.name = "后羿";
hou.attack = 80;
hou.blood = 587;
Luban lu = new Luban();
lu.name = "鲁班";
lu.attack = 76;
lu.blood = 578;
while(hou.blood > 0 && lu.blood > 0) { //当一方血量少于0时跳出循环
hou.Fankui(lu);
if(hou.blood < 0 || hou.blood == 0 ) {
break;
}
lu.Fankui(hou);
if(lu.blood < 0 || lu.blood == 0) {
break;
}
}
if (hou.blood > lu.blood) { //判断输赢
System.out.println("后羿赢");
}
else {
System.out.println("鲁班赢");
}
}
}
主函数来做最后的输赢判定。
结果截图
版权声明:本文为tbbaichi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。