考虑以下 Java 类:
public class Animal {
public static void printText(Object obj) {
System.out.println(obj.toString());
}
}
class Tiger extends Animal {
// Contains some unimportant methods.
}
现在,当在 main 方法中输入以下内容时,编译器不会给出任何错误,即使该转换会导致错误。为什么?
public static void main(String[] args) {
Animal animal = new Animal();
((Tiger)animal).printText(animal); // <= ?? no error in the compiler ??
}
最佳答案
在您的示例中,可能很容易知道强制转换是错误的 - 但在一般情况下并非如此。
如果您有一个也可能返回 Tiger
的方法 Animal getRandomAnimal()
该怎么办? (或更常见的情况是,Animal getAnimal()
方法可能会被子类重写以返回 Tiger
)。
在编译时,你不可能知道是否
Tiger tiger = (Tiger)getRandomAnimal();
是否有效,只有在运行时才知道。
关于java - 为什么编译器在进行 "bad"转换时不给出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14673314/