java - 向现有对象添加新属性

标签 java object inheritance attributes

我想询问一些关于我遇到的问题。 假设我们有一个名为 Vehicle 的接口(interface)。

然后我们有一个实现这个接口(interface)的类,称为 Car。 然后还有一个叫自行车。

现在整个代码使用这两个对象(汽车、自行车)以及任何需要的接口(interface)车辆。

如果现在我想向 Car 类添加一个新属性,并且由于此更改还修改了它的一些方法,该怎么办?例如,我可以使用名为 Car2 的类来扩展 Car。但现在如果我想在代码中使用 Car2,我将不得不将使用 Car 的每个方法和类重写为将使用 Car2 的新类。

例如不属于 Car 类的方法。

int checkSpeed(Car c) {
    speed = c.attributeX * 100
}

现在我希望这个方法也能够接受 Car2 并改变它计算速度的方式。我需要重写类和方法还是有更简单的方法来做到这一点?

请记住,我不想完全修改 Car,我只想同时拥有 Car 和 Car2,并在同一类中按需使用它们,而不必重写所有它们。

谢谢!

最佳答案

您可以在子类 (Car2) 内覆盖父类(super class) (Car) 的方法,这称为多态性,即OOP 的核心原则之一。这一原则允许我们根据运行时传递的实际对象(CarCar2 对象)调用不同的类行为。

对于您的问题,您可以遵循状态模式,它将根据传递的类型和checkSpeed()的实际实现提供动态行为,如下所示:

SpeedChecker 类:

public class SpeedChecker {
  int checkSpeed(Vehicle v) {
    //depending upon the Vehicle type object passed, checkSpeed() will be called
    v.checkSpeed();
 }
}

汽车类别:

public Car implements Vehicle {
    int checkSpeed(Car c) {
       //Add specific logic for Car
    }
} 

Car2 类:

public Car2 implements Vehicle {
    int checkSpeed(Car c) {
       //Add specific logic for Car2
    }
} 

关于java - 向现有对象添加新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40448816/

相关文章:

java - MVC——循环依赖

Javascript:在 Node.js 对象内调用函数

c# - 有没有办法压缩内存中的对象并透明地使用它?

php - 仅当重新初始化继承类中的实例变量时,PHP 中使用单例模式的类继承才有效。但为什么?

vba - 在 VBA 中实现接口(interface)的类模块中的其他方法

hibernate - JPA 如何与 EntityManager.find() 一起处理部分、非不相交的继承(在每表类场景中使用 InheritanceType.JOINED)?

Java : Client-Server Simple Application with IP Blacklist

java - 通过java运行ab-initio图?

ios - 为什么 UILabel 内存泄漏?

java - org.xml.sax.SAXParseException; 1 字节 UTF-8 序列的字节 1 无效