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)
类
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中文网其他相关文章!