在此代码中需要转换为Bar
。我试图了解它避免了什么问题。如果编译器将让我用Foo
作为Bar
没有铸造,岂不是能够使用Bar
可能具有的扩展功能?还是有更重要的原因?或者,这个例子太简单了,无法解释为什么我必须施放?铸造有什么保护措施?
class Foo { }
class Bar extends Foo { }
public class Main {
public static void main(String[] args) {
Foo f1 = new Bar();
Bar b1 = (Bar) f1;
}
}
我们可以写一个简单的例子,我看的明白,如果我不投会有麻烦?我可以认为运行时可以帮助自己而不用在上面的代码中投射,但是我当然没有理解为什么我必须执行投射的深刻细节。
最简单的例子:'1/2'将导致0,除非你施放他们中的一个将翻一番,所以在代码'2 /(1/2)'你可以,如果你不投得到一个异常。 – Maroun
你应该看看javas [多态](https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html),这是强制你在这种情况下投射的概念。 –