首页 > Java > 正文

对Java中的多态性和静态绑定感到困惑

PHPz
发布: 2024-02-11 09:30:08
转载
655 人浏览过

php小编西瓜经常收到关于Java中的多态性和静态绑定的问题。这两个概念在Java中经常被提及,但对于初学者来说可能会感到困惑。在本文中,我们将简要介绍多态性和静态绑定的概念,并解答一些常见问题,帮助读者更好地理解和应用这些概念。

问题内容

我对java还是很陌生。所以我一边玩java一边阅读多态性和静态绑定。我来这里是为了澄清我的思考过程是否正确。

class a {
    void foo(a a) {
        system.out.println("aaaaaa");
    }

}

class b extends a {
    void foo(b a) {
        system.out.println("bbbbb");
    }

}

class c extends b{
    void foo (a a){
        system.out.println("cccccbbbb");
    }

}
登录后复制

我创建了以下名为 c 的对象,并以 c 作为参数调用 foo。

C c = new C();
c.foo(c); // the output is BBBBB
登录后复制

从这篇关于java重载和动态绑定的问题中,我了解到如果在类中找不到发送的参数,它将把参数(在本例中为c)向上转换为在类中可以找到的参数(在此情况 a,因为 void foo (a a))。但如果是这样的话,它不应该打印“cccccbbbb”吗?通过静态绑定?void foo (a a))。但如果是这样的话,它不应该打印“cccccbbbb”吗?通过静态绑定?

解决方法

c 有 2 个重载方法,名称为 foo

解决方法

c 的参数调用方法 foo 时,将选择最具体的一个 - 类 b 在层次结构上比类 a 更接近,因此调用 foo(b)

有 2 个重载方法,名称为 foo🎜
// defined in the class C
void foo (A a){
    System.out.println("CCCCCBBBB");
}

// inherited from the class B
void foo(B a) {
    System.out.println("BBBBB");
}
登录后复制
🎜当我们使用类 🎜 的参数调用方法 foo 时,将选择最具体的一个 - 类 b 在层次结构上比类 a 更接近,因此调用 foo(b) 。🎜

以上是对Java中的多态性和静态绑定感到困惑的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板