|
|
1
1
只有当你重写时,多态性才起作用。这里您重载了不同的方法,因此当您声明时:
记住,父类不知道子类的方法,但子类知道父类的方法。所以这里你可以用D代替A,但你不能调用D的方法。对不起,如果我的英语很糟糕,但TLDR:A只知道1个方法calc(double-num),因为double-num也可以接受int和long,这就是函数工作的原因。否则就行不通了。 假设在第一个例子中,您在CityBike类中有一个方法introducteYourSelf(String name),您可以这样做:
|
|
|
2
0
实际上,这不是最合适的。 考虑 Widening primitive conversions 这将用于选择最合适的方法。 可能的转换为:
您希望选择将浮点作为参数的方法。然而,正如你在上面的列表中看到的,double永远不可能适合另一种类型…double。 JLS 15.12.2.5 结束询问:
因此,由于float可以传递给double,而double不能传递给float,所以选择A中的方法是最合适的。
在自行车示例中,您正在重写方法,而在第二个示例中您正在重载。重载最合适的方法时(根据JLS 15.12.2.5),重写时将调用运行时对象的“最近”方法。 |
|
|
3
0
B、C、D中的calc方法不会覆盖A中的calc-mehtod,因此当您通过a1(它是A)调用calc时,它实际上调用了A中的方法define(public int calc(double num)),因此结果是11。(也就是说,a1被视为A,而不是D。请注意,A中只有一个方法define) 但当您通过d1调用calc时,它定义了4个版本的calc,结果取决于参数的类型和参数。 |
|
|
nuno · Java/Kotlin堆大小 2 年前 |
|
|
Vertos · 即使在Java中断后,线程也会继续打印RAM使用情况 2 年前 |
|
|
estakkk · 在Flask应用程序中遇到RuntimeError 2 年前 |
|
|
JY1993 · 如何修复邮件合并的运行时错误? 3 年前 |
|
|
Park · 为什么两个不同实例的isa指针相同? 8 年前 |
|
|
Matthias · 转到运行时日志详细信息更改 8 年前 |
|
|
belnxkkk · spring在运行时添加数据源 8 年前 |