[英]Two methods with the same name in java
我注意到如果我有两个具有相同名称的方法,第一个接受SomeObject
,第二个接受一个扩展SomeObject
的对象,当我用SomeOtherObject
调用该方法时,它会自动使用只接受SomeObject
。 如果我将SomeOtherObject
SomeObject
为SomeObject
,则使用接受SomeObject
的方法,即使该对象是SomeOtherObject
的实例也是如此。 这意味着在编译时选择该方法。 为什么?
这就是Java中方法重载解析的工作原理:在编译时选择该方法。
有关所有丑陋的细节,请参阅Java语言规范§15.12。
这意味着在编译时选择该方法。
是的,你是对的。 这就是它的含义。
为什么?
我可以想到他们以这种方式设计Java的四个原因:
这与支持重载工作的其他静态类型OO语言的方式一致。 这是来自C ++世界的人们所期望的。 (这在Java的早期尤为重要......虽然现在不是很多。)。 值得注意的是,C#以相同的方式处理重载。
它很有效率。 在运行时解析方法重载(基于实际的参数类型)会使重载方法调用变得昂贵。
它提供了更可预测(因此更容易理解)的行为。
它避免了脆弱的基类问题,即在基类中添加新的重载方法会在现有派生类中导致意外问题。
参考文献:
是的,要执行的功能是在编译时决定的! 因此JVM在编译时不知道Object的实际类型。 它只知道指向作为函数参数给出的对象的引用类型。
有关更多详细信息,您可以查看在Java规范中选择最具体的方法 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.