java重写中 子类返回值方法必须要小于等于父类返回值方法吗
时间: 2024-02-02 13:07:22 浏览: 122
Java中,子类覆盖(重写)父类方法时,返回值类型必须与父类方法的返回值类型相同或者是其子类型(即协变返回类型)。这是因为,子类覆盖父类方法时,其返回值类型必须满足父类方法的返回值类型的要求,否则会导致编译错误。
举个例子,假设有一个Animal类和其子类Dog类,Animal类中有一个返回Animal类型的eat()方法,Dog类想要覆盖此方法,那么Dog类中的eat()方法必须要返回Animal类型或Animal类型的子类,比如Dog类型,否则会编译错误。
示例代码:
```
class Animal {
public Animal eat() {
System.out.println("Animal is eating");
return new Animal();
}
}
class Dog extends Animal {
@Override
public Dog eat() { // 编译错误,返回值类型不匹配
System.out.println("Dog is eating");
return new Dog();
}
}
```
正确的代码应该是这样的:
```
class Animal {
public Animal eat() {
System.out.println("Animal is eating");
return new Animal();
}
}
class Dog extends Animal {
@Override
public Animal eat() { // OK,返回Animal类型或Animal类型的子类
System.out.println("Dog is eating");
return new Dog();
}
}
```
需要注意的是,子类方法的访问修饰符不能低于父类方法的访问修饰符,即子类方法不能降低方法的可见性,否则也会导致编译错误。
阅读全文