我是一名新的 Java 开发人员,在使用 Java 中的继承概念来定义我的类时遇到了一些困难...
一方面,我有一个名为 Vehicle 的通用类,它定义了数十年的属性(及其 getter/setter)。我有一个 Vehicle1 类,它扩展 Vehicle 类。
另一方面,我有一个名为 VehicleFactory 的通用类,它定义了一个静态方法,如下所示:
public class VehicleFactory {
protected static Vehicle makeResult() {
Vehicle result = new Vehicle();
result.setCode("1");
result.setNumber("2");
// other setters methods
return result;
}
问题是我想创建一个带有自己的 makeResult 方法的 Vehicle1Factory 类,该方法使用其父类的 makeResult 方法。但我没能做到这一点(这里的目的是优化,因为 Vehicle1 具有 Vehicle 类的所有通用属性,但还有一些附加属性)。
我尝试写的是这样的:
public class Vehicle1Factory extends VehicleFactory {
protected static Vehicle1 makeResult() {
Vehicle1 result = new Vehicle1();
result = (Vehicle1) VehicleFactory.makeResult();
// I want to reuse the makeResult of its parent class to define
// its own makeResult method
}
}
但是当我这样做时,Java 告诉我存在 ClassCastException 并且我不能在此处使用强制转换...
这种情况有什么解决办法吗?
最佳答案
一旦创建了Something
的实例,它就永远不能成为其他东西的实例。由于 VehicleFactory.makeResult
创建 Vehicle
实例,因此无法将其转换为 Vehicle1
。
您必须为此创建一个新的 Vehicle1
。
解决方案可以是将要重用的代码移至实用程序方法,例如:
class Vehicle { }
class Bike extends Vehicle { }
class VehicleFactory {
static Vehicle create() {
Vehicle vehicle = new Vehicle();
initialize(vehicle);
return vehicle;
}
private static void initialize(Vehicle vehicle) {
result.setCode("1");
result.setNumber("2");
// ...
}
}
class BikeFactory {
static Bike create() {
Bike bike = new Bike();
VehicleFactory.initialize(bike);
return bike;
}
}
关于java - 重用继承来定义Java中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359097/