继承
悄悄话
哪管什么真理无穷,进一寸有一寸的欢喜。
实践是检验真理的唯一标准。
学技术的确要找捷径,但脚踏实地的古训依然成立,不循规蹈矩,但要按部就班。学习中难免会遇到坎,但要相信这终将过去,当你站在更高的视角俯瞰,这不过培塿罢了。
比如这次的继承,我初学觉得自己懂了,做个练习检验一下,处处有问题,尽管最终还是搞定了,但其实并未真正理解。今天碰巧又和后来的小伙伴一起听了继承,再理了一遍思路,终于豁然开朗,快哉快哉!
预备知识
1.类与对象
2.参数
继承简介
面向对象的三大特征之一(另两个为 封装 和 多态)
只能是单继承,即一个子类至多有一个父类
引入继承是为了实现软件复用
继承的关键字 extends
继承案例剖析及效果分析
场景:王者荣耀
对线英雄:妲己 vs 鲁班
then 胜方打主宰
采取回合制
主宰实际攻击值为其设定攻击值的两倍,实现暴击
其余按设定攻击值攻击。
要求 每个类中至多有一个方法; 输出战斗过程及结果
分析:
我们需要英雄类,主宰因为在这个情景中与英雄的属性、方法并无不同,可归为英雄类。
但主宰的攻击方法是两倍攻击值,这是不同之处,可采取子类方法重写来实现。
上手:
继承的格式为
修饰符 class SubClass(子类) extends SuperClass(父类)
{
//定义类
}
首先我们来创建Hero类
妲己 鲁班 主宰都有的属性和方法是啥?
名字,初始血量,攻击值,(普通)攻击方法
public class Hero
{
int blood;
int attacknum;
String name;
public void attack(Hero h)
{
if(h.blood>0) {
h.blood=h.blood-attacknum;
System.out.println(h.name+"的血量还剩"+h.blood);
}
else{
System.out.println(h.name+"阵亡");
}
}
}
then 我们来创建主宰特有的一个类,让它继承Hero类
且重写attack方法;
public class Boss extends Hero
{
public void attack(Hero h)
{
if(h.blood>0){
h.blood=h.blood-attacknum*2;
System.out.println(h.name+"的血量还剩"+h.blood);
}
else{
System.out.println(h.name+"阵亡");
}
}
}
最后在任意一个主方法中写出
public static void main(String[] args)
{
// TODO Auto-generated method stub
Hero c1=new Hero();
Hero c2=new Hero();
Boss c3=new Boss();
c1.name="妲己";c1.attnum=3;c1.blood=20;
c2.name="鲁班";c2.attnum=2;c2.blood=24;
c3.name="主宰";c3.attnum=1;c3.blood=30;
System.out.println(c2.name+"的血量为"+c2.blood);
System.out.println(c1.name+"的血量为"+c1.blood);
System.out.println("攻击开始!");
//回合制
while(c1.blood>0 && c2.blood>0)
{
c1.attack(c2);
c2.attack(c1);
}
// 判断胜负
if(c1.blood>0)
{
System.out.println(c1.name+"win!");
//增加回血效果
c1.blood=c1.blood+10;
while(c3.blood>0 && c1.blood>0)
{
c1.attack(c3);
c3.attack(c1);
}
}
else
{
System.out.println(c2.name+"win!");
//回血效果
c2.blood=c2.blood+10;
while(c3.blood>0 && c2.blood>0)
{
c2.attack(c3);
c3.attack(c2);
}
}
}
重写方法的几点要求
有口诀:两同两小一大
两同: 方法名相同 (如都是attack);
形参列表相同(如都是Hero类的形参)
两小: 子类方法返回值类型应比父类方法返回值类型小或相等;
子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等.
一大: 子类方法的访问权限应比父类方法的访问权限大或相等(当父类方法为private时,不可重写).
访问权限: 由大到小为 public ,protected, 缺省 ,private
最后
希望有志于在大学期间掌握良好编程技能,或希望日后入职大型互联网公司或金融行业的同道中人能和我互关,交交朋友,毕竟,1+1>2嘛,大家一起进步啊!