首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Casting(Base) o-它到底做了什么?

Casting(Base) o-它到底做了什么?
EN

Stack Overflow用户
提问于 2011-09-13 21:08:02
回答 2查看 67关注 0票数 1
代码语言:javascript
复制
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的静态类型。我记得这里有人告诉我,它不会改变它,那么它能做什么呢?为什么我需要这样做?在什么条件下,为了什么目的?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-13 21:11:48

它没有改变o的静态类型,因为表达式o仍然是Sub类型-但是表达式(Base) oBase类型。我想你的意思可能是它不会改变o引用的对象的类型。在这种情况下,强制转换为Base根本没有任何意义。它不会改变foo()调用的执行。然而,在各种不同的情况下,强制转换确实是有意义的。

票数 3
EN

Stack Overflow用户

发布于 2011-09-13 21:21:37

它什么也做不了。在其他一些语言中,它可能会调用在Base中定义的foo,但在本例中,它仍然调用Sub.foo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7402399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档