更新时间:2021-08-11 来源:黑马程序员 浏览量:

在继承关系中,子类会自动继承父类中公共的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。需要注意的是,子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。
在上一节案例中,Dog类从Animal类继承了shout()方法,该方法在被调用时会打印“动物发出叫声”,这显然不能描述一种动物的具体叫声,Dog类对象属于犬类,发出的叫声应该是“汪汪”。为了解决这个问题,可以在Dog类中重写父类Animal中的shout()方法,如文件1所示。
文件1 Example02.java
// 定义Animal类
class Animal {
//定义动物叫的方法
void shout() {
System.out.println("动物发出叫声");
}
}
// 定义Dog类继承动物类
class Dog extends Animal {
// 定义狗叫的方法
void shout() {
System.out.println("汪汪……");
}
}
// 定义测试类
public class Example02 {
public static void main(String[] args) {
Dog dog = new Dog(); // 创建Dog类的实例对象
dog.shout(); // 调用Dog类重写的shout()方法
}
}运行结果如图1所示。
文件1中,定义了Dog类并且继承自Animal类。在子类Dog中定义了一个shout()方法对父类的方法进行重写。从运行结果可以看出,在调用Dog类对象的shout()方法时,只会调用子类重写的方法,并不会调用父类的shout()方法。
注意:
子类重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限。如:父类中的方法访问权限是public,子类重写父类该方法的访问权限就不能是private。
黑马程序员 AI 运维|10 大企业级项目实战,毕业即具备独立运维能力
2026-04-09黑马程序员 AI 运维|10 大技术阶段 + 10 大实战项目,从 Linux 到 AI 大模型运维全掌握
2026-04-09黑马程序员 AI 运维|云原生 + 大模型 + 信创三位一体,培养企业紧缺复合型运维人才
2026-04-09黑马程序员AI测试|上市品牌背书,实战赋能,助力冲击年薪30万+
2026-04-09全国13城校区全覆盖|黑马程序员AI测试,就近学、就近就业,冲击高薪
2026-04-09黑马程序员AI测试|10+企业级项目实战,学完即具备AI测试硬核实力
2026-04-09