class Rectangle {}
class ColoredRectangle extends Rectangle {}
class Base {
void foo(Rectangle x) {
System.out.println("Base: foo(Rectangle)");
}
}
class Sub extends Base {
@Override
void foo(Rectangle x) {
System.out.println("Sub: foo(ColoredRectangle)");
}
}
public class WhatHappensHere {
public static void main(String[] args) {
Sub o = new Sub();
Rectangle rc = new ColoredRectangle();
((Base) o).foo(rc);
}
}我很难意识到这个(Base) o是否改变了o的静态类型。我记得这里有人告诉我,它不会改变它,那么它能做什么呢?为什么我需要这样做?在什么条件下,为了什么目的?
谢谢
发布于 2011-09-13 21:11:48
它没有改变o的静态类型,因为表达式o仍然是Sub类型-但是表达式(Base) o是Base类型。我想你的意思可能是它不会改变o引用的对象的类型。在这种情况下,强制转换为Base根本没有任何意义。它不会改变foo()调用的执行。然而,在各种不同的情况下,强制转换确实是有意义的。
发布于 2011-09-13 21:21:37
它什么也做不了。在其他一些语言中,它可能会调用在Base中定义的foo,但在本例中,它仍然调用Sub.foo
https://stackoverflow.com/questions/7402399
复制相似问题