考虑以下情形很常见的OO文献:超类返回子类型
public class Vehicle {
}
public class Car extends Vehicle {
}
public class Bike extends Vehicle {
}
现在,假设我想创建一个功能get()
将始终返回子类型,以便我能得到一个子类的实例:
public static void main(String[] args) {
Car car = Car.get();
Bike bike = Bike.get();
car.Start();
bike.Start();
}
它可以实现在意识到它的返回类型的超类public static <T> T get()
没有传递给它作为一个参数或从Object
铸造?
UPDATE:
在我说的是抽象类的第一个版本。现在我删除了摘要,并使用常规课程。
我不知道Java是否支持[CRTP](http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) –
为什么要这么做?抽象类的全部要点是隐藏具体细节。 – dbarnes
为什么你不说:'汽车=新车();'......等等? –