gpt4 book ai didi

java - 为什么我们不能覆盖一个方法并将其定义为返回原始方法的父类(super class)?

转载 作者:行者123 更新时间:2023-11-30 06:54:26 25 4
gpt4 key购买 nike

我目前正在从 java tutorial oracle 学习 Java 类和对象并遇到过如下语句和代码。我理解这个概念,但我不知道为什么我们不能覆盖一个方法并将其定义为返回原始方法的父类(super class)?其背后的原因是什么?有人可以启发我吗?在此先感谢您的帮助!

You can override a method and define it to return a subclass of the original method, like this:

public Number returnANumber() {
...
}

覆盖原来的方法:

public ImaginaryNumber returnANumber() {
...
}

最佳答案

想象一下,如果可能的话:

public class CarFactory {
Car giveMeACar() { ... };
}

public class SpecialCarFactory extends CarFactory {
@Override
Object giveMeACar() {
return "hello world";
}
)

public class Driver {
void drive() {
CarFactory carFactory = new SpecialCarFactory();

Car car = carFactory.giveMeACar();
// err, wait, sorry, can't do that.
// This car factory, despite its name, doesn't produce cars.
// It produces objects, and I've heard they're just
// "hello world" strings. Good luck driving a "hello world"
// string on a highway!
}
}

看,这只是契约(Contract)的事情。当你去咖啡店时,你希望它能卖咖啡。如果不符合这个约定,就不能称为“咖啡店”:咖啡店必须卖咖啡。它可以卖奶咖啡,因为奶咖啡仍然是咖啡。 (就像一家汽车厂只能生产丰田,因为丰田是一辆汽车,你可以像驾驶任何其他汽车一样驾驶丰田,甚至不知道它是一辆丰田:这就是多态)。

关于java - 为什么我们不能覆盖一个方法并将其定义为返回原始方法的父类(super class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36418671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com