
正文
Java中的overload(方法的覆写)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
方法覆写(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关键字主要有以下两个用途:
在子类构造函数中调用父类构造函数。
在子类中调用父类的方法。







