📅  最后修改于: 2023-12-03 15:15:58.424000             🧑  作者: Mango
在Java中,继承是一种重要的面向对象编程(OOP)概念。使用继承,我们可以利用已有类的属性和方法来创建新的类,而无需重新编写相同的代码。在这个主题中,我们将探讨Java的继承问题7。
在Java中,如果子类的方法与父类的方法名称和参数都相同,但是返回类型不同,会出现什么情况?请给出一个示例程序。
当子类的方法名称和参数与父类的方法相同,但是返回类型不同时,我们称之为“覆盖”。在Java中,方法的覆盖必须满足以下条件:
下面是一个示例程序,演示如何在子类中覆盖父类方法,返回类型为子类类型。
class Animal {
String getName() {
return "Animal";
}
}
class Dog extends Animal {
@Override
String getName() {
return "Dog";
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Animal();
Dog d = new Dog();
Animal ad = new Dog();
System.out.println(a.getName()); // 输出 "Animal"
System.out.println(d.getName()); // 输出 "Dog"
System.out.println(ad.getName()); // 输出 "Dog"
}
}
在这个示例中,我们定义了一个名为Animal
的父类和一个名为Dog
的子类。Animal
类具有一个名为getName()
的方法,返回类型为String
,并且返回一个字符串"Animal"
。在子类Dog
中,我们覆盖了getName()
方法,并将其返回类型更改为String
的子类(即"Dog"
)。在主类Main
中,我们创建了三个实例:一个Animal
类型的对象a
,一个Dog
类型的对象d
和一个Animal
类型的对象ad
,并分别调用它们的getName()
方法。输出表明,a.getName()
返回"Animal"
,d.getName()
返回"Dog"
,ad.getName()
返回"Dog"
。这表明,如果子类的覆盖方法的返回类型是父类方法的子类型,则可以使用该子类型的实例返回覆盖方法。