gpt4 book ai didi

java - 关系有一个,继承和类型转换

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

假设我有以下类(class):

abstract class AbstractEngine{...}
abstract class AbstractTransmission {...}
abstract class AbstractCar {
private AbstractEngine engine;
private AbstractTransmission transmission;
//setters and getters
...
}

class ConcreteEngine extends AbstractEngine{...}
class ConcreteTransmission extends AbstractTransmission{...}
class ConcreteCar extends AbstractCar {
public void move() {
ConcreteEngine engine = (ConcreteEngine)getEngine();
ConcreteTransmission transmission = (ConcreteTransmission) getTransmission();
....
}
}

正如您在 ConcreteCar 中看到的,我们将进行大量的类型转换来处理具体细节。在我看来,我在这里做错了什么。无论如何,我可以使用 has 关系和继承来避免如此多的转换吗?

最佳答案

你是对的,这种沮丧通常是糟糕设计的症状。

就您而言 - 看来您的抽象不够好。

换句话说:您的(抽象)类应该提供处理相应对象所需的所有*行为。

含义:对于 AbstractEngine 的用户来说,该对象背后的实现绝对重要。因此:查看抽象类提供的接口(interface);并以一种允许您执行必要事情而无需进行instanceof检查和向下转型的方式重新设计它们。

考虑将您的功能“拆分”为一组界面也可能是值得的;允许您进行更“细粒度”的功能切片。

关于java - 关系有一个,继承和类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45186536/

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