java萌新入门之类继承

2017-04-12  本文已影响0人  蛤星人丨冬马和纱

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{

}


非常的简洁和简练。这使我深刻体会到继承的好处。

上一篇下一篇

猜你喜欢

热点阅读