Java--类的继承--回合制对战游戏

1.为什么需要使用继承?

     生活中有时候会出现有包含关系的两个类,比如,人和成年人,学生和大学生,他们有一些互通之处。如果把它们写成程序,比如

public class Student{

          public String name;

          public void study(){

          //具体的学习行为代码

          }

}

public class UNStudent{

          public String name;

          public void study(){

          //具体的学习行为代码

          }

          public void play(){

          //具体的玩行为代码     

          }

}

两个类中有一些相同的属性和方法,如果我每次都这样一个一个单独地去定义类,势必会有大量的重复代码,效率也不怎么高,而且这样定义出的两个类是独立的,没有关系的,但我们都知道,其实实际生活中学生类和大学生类有着密切的联系。为了减少代码的冗余,又能体现实际生活中两个类的关系,所以有了继承。

那么究竟是谁继承谁呢?这个显而易见,对于有包含关系的两个类,应是被包含的类去继承包含它的类,即较高级,更细节化的类去继承更基础的类,为了形象化的说明关系,Java中又称为子类继承父类,关键字extends,在定义子类时用到,比如这里:

public class Student{

          public String name;

          public void study(){

          //具体的学习行为代码

          }

}

public class UNStudent extends Student{

}

2.Java继承的语法格式

        关键字:extends
格式:
public class 类名(子类、派生类、超类)  extends 类名(父类、基类) {

}
注意:Java中类的继承是单继承(一个子类只能继承一个父类)。

3.继承到了什么?

    显然,子类继承到了父类的属性和方法,但对于所有的属性和方法都能完全继承吗?答案是肯定的。

    所有访问修饰符修饰的属性和方法都能被子类继承。

    但又并不是那么简单。

    访问修饰符是用来限定属性或方法的访问范围,情况如下:
访问修饰符 同类 同包     不同包 不同包但是有继承关系的子类中
private        可以 不可以     不可以 不可以
默认的        可以 可以     不可以 不可以
protected                 可以 可以     不可以 可以
public        可以 可以      可以        可以

    访问修饰符的范围:public>protected>默认的>private

     那么,问题又来了,子类是否可以增添父类中没有的属性和方法?答案自然,子类比父类更高级更具体,自然要有父类没有的,不然与父类完全相同,所谓继承也有没有什么实际意义了。

     进一步,子类是否可以否定父类中的属性和方法?答案是可以,因为总存在相似的行为或功能,父类中的太过于基础,又或者说低级,不是那么能够很好地适应子类的需要,这时候在子类中就得进行改善,这就是Java中所称的方法的重写。

4.方法重写

方法重写的条件
1.必须要存在继承关系。
2.子类在重写父类方法的时候,访问修饰符可以大于或者等于父类方法的访问修饰符。
3.子类重写父类方法时,返回值类型、方法名、参数都必须 要和父类的完全一致。
4.方法中的代码必须要不同。

      如何调用重写的方法?
要考虑的内容是:new关键字后的类名是谁的,如果是子类,那么优先调用子类的方法,如果子类中没有这个方法,才会调用父类的方法。

举例:

public class Student{

          public String name;

          public int time;

          public void study(){

                    time--;                                            //学习,学时减少

                    System.out.println(name+"正在学习中!剩余的学时为"+time);

          }

}

public class UNStudent{

          public String name;

          public int time;

          public int credit;

          public void study(){                                                         

                    time--;                                              //学习,学时减少

                    credit++;                                          //与Student类中的学习方法不同之处,进行了方法的重写,学习,学分增加

                    System.out.println(name+"正在学习中!剩余的学时为"+time+",已修的学分为"+credit);

          }

}

实践:

       奥特曼A和小怪兽A进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
       奥特曼A胜利,则奥特曼A和奥特曼B进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
       小怪兽A胜利,则小怪兽A和小怪兽B进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!

Java--类的继承--回合制对战游戏_第1张图片Java--类的继承--回合制对战游戏_第2张图片

Java--类的继承--回合制对战游戏_第3张图片Java--类的继承--回合制对战游戏_第4张图片Java--类的继承--回合制对战游戏_第5张图片Java--类的继承--回合制对战游戏_第6张图片Java--类的继承--回合制对战游戏_第7张图片






你可能感兴趣的:(Java)