1.使用继承的原因:
提高代码的重用性;提高程序的扩展性。
2.java继承的语法格式:
public class 类名(子类、派生类、超类) extends 类名(父类、基类) {
}
注:Java类只能继承一个父类(单继承)。
3.子类从父类中继承到的属性和方法能否被调用与访问修饰符的关系:
4.方法重写:
① 用途:子类和父类有同一个方法,但需要不同实现时,使用重写。
② 重写的条件:1.必须有继承关系;
2.子类在重写父类的方法时,子类方法的访问修饰符必须要大于或者等于父类方法的访问修饰符;
3.子类在重写父类的方法时,子类方法的返回值类型,方法名,参数都必须要和父类的完全一致。
③ 调用重写后的方法格式:
根据new关键字后的类名来决定调用的对象是谁的——new关键字后类名是子类,那么会有限调用子类中重写的方法;如果子类没有,则执行父类中的方法。
④ 如果想要在子类重写的方法中调用父类中的方法,那么应该如何实现?
使用super关键字。
练习
1.回合制对战游戏:奥特曼迪迦和小怪兽哥斯拉进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
如果奥特曼迪迦胜利,则奥特曼迪迦要和另一个奥特曼对象进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
如果小怪兽哥斯拉胜利,则小怪兽哥斯拉要和另一个小怪兽对象进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
要求是类中只能有一个攻击方法,方法中也只能有一个参数。
在这一节的练习中。我本来的想法是再创建一个奥特曼2类和小怪兽2类,因为最先写的攻击方法是分别给奥特曼和小怪兽的。比如小怪兽的攻击方法只能是面向奥特曼的。如下所示
public void attack(OutMan om){
//被攻击方HP减少2
om.HP=om.HP-2;
System.out.println(name+"攻击了奥特曼"+om.name+",对方的血量减少至"+om.HP);
if(om.HP==0){//判断奥特曼的血量是否为零
System.out.println(name+"作为小怪兽已经击败了奥特曼"+om.name);
}
}
而建立了怪兽2类就可以使怪兽的攻击能面向小怪兽了。
然而我这样的想法是错的。因为表面上是达到了需求,实际上增加了类。原有的奥特曼依然不能攻击小怪兽类。
代码量也很冗长复杂。因为需要重新写两个类和两个新的攻击方法。
最后明白,达到原题的目的,只需要建立一个大类(Person),和对双方通用的攻击方法,让奥特曼和小怪兽成为Person的子类,去继承过来,这样就解决了。
public void attack(Person p){
//被攻击方HP减少
p.HP--;
System.out.println(name+"攻击了"+p.name+",对方的血量减少至"+p.HP);
if(p.HP==0){//判断怪兽的血量是否为零
System.out.println(name+"已经击败了"+p.name);
}
}
比如奥特曼对于Person的继承:
package OutMan2;
public class OutMan extends Person{
}
非常的简洁和简练。这使我深刻体会到继承的好处。