更新时间:2022年03月30日14时04分 来源:传智教育 浏览次数:
继承的概念
在Java中,类的继承是指在一个现有类的基础上去产生一个新的类,产生的新类被称作子类,现有类被称作父类,子类会自动拥有父类的属性和方法。例如定义一个Animal类作为父类,该类拥有一个call()方法,当子类Cow和Sheep继承自Animal类时,就会自动拥有call()方法,接下来通过一个图例来描述类的继承关系,如图3-11所示。
图3-11动物继承关系图
在程序代码中,如果想定义一个类继承另一个类,需要使用extends关键字。如果一个类没有使用extends关键字明确标识继承另一个类,那么这个类就是默认继承Object类。Object类是所有类的父类,那么该类中的方法适用于他的所有子类,其类中常用的方法有toString()、hashCode()方法等。
注意:
在类的继承中,需要注意以下几个问题,具体如下:
1、在Java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类。例如Cow这个类继承Animal之后,就不允许继承其他类。
2、多个类可以继承一个父类,例如Cow和Sheep都可以继承Animal类。
3、在Java中,多层继承是允许的,即一个类的父类可以再去继承其他的父类,例如Zebra类继承自Horse类,而Horse类又可以去继承Animal类,即子孙三代。
重写父类方法
在继承关系中,子类会继承父类中定义的方法,但子类也可以在父类的基础上拥有自己的特征,即对父类的方法进行重写。需要注意的是,在子类中重写的方法必须与父类被重写的方法具有相同的方法名、参数列表以及返回值类型。接下来通过一个案例来演示如何实现子类重写父类的方法。具体步骤如下:
1.创建Animal类
创建一个Animal类,并在类中定义两个方法call()和sleep(),分别在两个方法中输出“动物发出的声音”和“动物在睡觉”的信息,如文件3-19所示。
文件3-19Animal.java
package com.itheima.example10; // 定义Animal类 public class Animal { // 定义动物叫的方法 public void call() System.out.println("动物发出声音..."); } // 定义动物睡觉的方法 public void sleep() { System.out.println("动物在睡觉..."); } }
2.创建Cow类创建一个Cow类,使其继承Animal类,并在Animal类重写call()方法,如文件3-20所示。
文件3-20Cow.java
java1package com.itheima.example10; // 定义Cow类继承Animal类 public class Cow extends Animal { // 定义一个打印name的方法 public void call() { System.out.println("哞..."); } }
3.创建测试类
创建一个测试类Example10,分别调用call()方法和sleep()方法,如文件3-21所示。
文件3-21Example10.java
package com.itheima.example10; public class Example10 { public static void main(String[] args) { Cow c = new Cow(); // 创建一个Cow类的实例对象 c.call(); // 调用Cow重写的call()方法 c.sleep(); // 调用父类Animal的sleep()方法 } }
运行结果如图3-12所示。
图3-12运行结果从图3-12的运行结果可以看出,当子类继承父类的时候,会拥有父类中所有的成员,由此可知,在调用sleep()方法时,会自动调用父类的sleep()方法。当子类重写了父类方法之后,创建的子类对象会自动调用重写的方法,即调用的是子类的call()方法。
注意:子类重写父类方法时,不可以使用比父类中被重写的方法更严格的访问权限,如:父类中的方法是public的,子类的方法就不可以是private的。