考慮以下情形很常見的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
爲什麼你不說:'汽車=新車();'......等等? –