方法覆写(overload)与方法的重载非常相似,它在 Java的继承中也有很重要的应用。
写程序可能会碰到下面的情况,在父类中已经实现的方法可能不够精确,不能满足子类
的需求。例如在前面的 Animal类中,breath方法就过于简单,对于鱼类动物是用腮呼吸的,
而对于哺乳动物则是用肺呼吸的,如何实现呢,Java提供的方法覆写就是解决这方面的问题。
在下面的程序中首先定义了一个父类 Animal,然后定义 Animal的 3个子类 Tiger、Fish
和 Dog,在父类中提供了 3个方法 eat、breath、sleep,在两个子类 Tiger和 Fish中重新定义
了 breath方法,在 Dog类中什么都没做。在 OverloadDemo中,创建了一个 Fish对象、一个
Tiger对象和一个 Dog对象,分别调用 breath方法。
class Animal { String type; //种类 String name; int age; //名称 //年龄 int weight; void eat() { //体重 //吃饭方法 System.out.println("动物爱吃饭"); } void breath() { System.out.println("动物呼吸"); } void sleep() { //呼吸方法 //睡觉方法 System.out.println("动物在睡觉"); } } //Tiger类继承 Animal类 class Tiger extends Animal { String tigerType; //老虎种类 String from; //定义老虎独有变量 //Tiger自己的方法 void tigerRun() { //老虎的奔跑方法 System.out.println("老虎在奔跑"); } void breath(){ //继承来的呼吸方法 System.out.println("老虎是用肺呼吸的"); } } //Fish继承 Animal类 class Fish extends Animal{ String fishType; //Fish自己的方法 void swim(){ System.out.println("鱼在游泳"); } void breath(){ System.out.println("鱼是用腮呼吸的"); } } class Dog extends Animal{ } public class OverloadDemo { public static void main(String[ ] args) { //声明三个不同的对象 Tiger tiger=new Tiger(); Fish fish=new Fish(); Dog dog=new Dog(); //都调用 breath方法 tiger.breath(); fish.breath(); dog.breath(); } }
程序运行结果是:
老虎是用肺呼吸的
鱼是用腮呼吸的
动物呼吸
方法被覆写后如果又需要调用,可以使用 super关键字来实现,示例如下。
class Animal { String type; String name; int age; int weight; void eat() { System.out.println("动物爱吃饭"); } void breath() { System.out.println("动物呼吸"); } } class Tiger extends Animal { String tigerType; String from; void breath() { //通过 super关键字调用父类的 breath方法 super.breath(); //调用动物类的呼吸方法 System.out.println("老虎是用肺呼吸的"); } } public class SuperDemo{ public static void main(String args[ ]){ Tiger tiger=new Tiger(); tiger.breath(); } }
在 Animal的子类 Tiger中,在 breath方法中,使用语句 super.breath();调用父类的 breath
方法。程序的运行结果如下:
动物呼吸
老虎是用肺呼吸的
super关键字主要有以下两个用途:
在子类构造函数中调用父类构造函数。
在子类中调用父类的方法。
时间: 2024-12-25 20:22:54