JAVA学习心得——继承

子类和父类的关系
就像名字一样,儿子会继承父亲的东西。(子类会继承父类的结构)
也像这层血缘关系一样,儿子只能有一个父亲,但父亲可以有几个儿子。(子类只有一个父类,但父类可以有多个子类)
在编码中,只要是类与类,其实都可以产生继承关系,不在乎谁属性方法的多和少,只不过为了程序的可读性和逻辑,就使用了子类与父类的命名。
为什么要使用继承?
在原有的基础上,进行扩充,并且还能可以减少代码的重复。
继承的规则
子类可以继承父类中的方法。
子类和父类可以具有同名的方法和属性。
子类能够重写父类中的方法(重写需要先继承,即要存在父类),可以使用自己的方法,不使用父类方法。
关于子类父类的转型
何时自动转型?何时强制转型?
思考这这两个问题即可,苹果是水果吗?水果是苹果吗?
在这里插入图片描述
可从代码旁的三角判断,是否存在重写。

关于继承的格式: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版权协议,转载请附上原文出处链接和本声明。