Casting-(Base) o- 它到底有什么作用?

发布于 2024-12-04 20:25:35 字数 643 浏览 0 评论 0原文

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 的静态类型。我记得我在这里被告知它不会改变它,那么它有什么作用呢?为什么我需要这样做?在什么条件下以及出于什么目的?

谢谢

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);
    }
}

I'm having a hard time realize if this (Base) o changes the static type of o. I remember that I was told here that it doesn't change it, so what does it do? why do I need to do that? in what conditions and for what purpose?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

め七分饶幸 2024-12-11 20:25:35

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

It's not changing the static type of o, in that the expression o is still of type Sub - but the expression (Base) o is of type Base. What I think you may mean is that it doesn't change the type of the object that o refers to. In this case, there is no purpose in casting to Base at all. It doesn't change the execution of the foo() call. There are various and different cases where casting does make sense, however.

〗斷ホ乔殘χμё〖 2024-12-11 20:25:35

它什么也不做。在某些其他语言中,这可能会调用 Base 中定义的 foo,但在这种情况下,它仍然调用 Sub.foo

It does nothing. In some other language this might call the foo defined in Base but in this case it still calls Sub.foo

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文