我有一个问题没有找到答案。假设我们在 java 或 c# 中有以下代码:
class Car {
/* car stuff */
}
然后在Java中
class Truck extends Car {
/* truck stuff */
}
和 C#
class Truck : Car {
/* truck stuff again */
}
在 C# 中,以下工作正常:
List<Car> carList = new List<Car>();
//add some objects to the collection
foreach(Truck t in carList)
//do stuff with only the Truck objects in the carList collection
这是因为 Truck 是 Car 的子类,简单来说,这意味着每辆 Truck 也是 Car。问题是,类型检查已完成,并且仅从 carList 中选择了卡车。
如果我们在 Java 中尝试同样的事情:
List<Car> carList = new ArrayList<Car>();
//add some objects to the collection
for(Truck t : carList)
//**PROBLEM**
由于增强循环内的代码,代码甚至无法编译。相反,我们必须这样做才能获得相同的效果:
for(Car t : carList)
if(t instanceof Car)
//cast t to Truck and do truck stuff with it
这与在 C# 中工作没有任何问题的想法相同,但在 Java 中您需要额外的代码。甚至语法几乎相同!它在Java中不起作用有什么原因吗?