【发布时间】:2019-07-30 13:49:36
【问题描述】:
为什么方法重载称为静态或编译时 多态性
Java 示例。
class StaticPolymorphismSample {
void polymorphicMethod(int a) {
}
void polymorphicMethod(int a, int b) {
}
void polymorphicMethod(String a) {
}
void nonPolymorphicMethod(int a) {
}
void nonPolymorphicMethod1(int a) {
}
}
所以我的问题是。
为什么我们说方法重载(在本例中为 polymorphicMethod 方法)是静态多态性,而另一种方法(nonPolymorphicMethod(int a)nonPolymorphicMethod1(int a))不是多态性 .
从技术上讲,我看不出具有相同名称和不同参数的方法与具有不同的方法之间的不同, 此处的所有答案和 google 中的主题均不适用于我的问题。
【问题讨论】:
-
区别在于
add(double, double)和add(int, int)是同一个函数的明显不同的forms('polymorphism'意思是'多种形式')。add(int, int)和subtract(int, int)不是。 -
为什么
add(int, int)和anotherAdd(int, int)不是?我们也可以说它们是不同的形式,例如list.add(element)和list.addAll(element,element)它们在不同的形式中具有相同的含义。 -
因为这样做没有意义。临时多态性(重载)必须在编译时解决。子类型多态性(继承)必须在运行时解决。您可以证明您的 specific 示例是一种“多态性”,但它不可概括,因此不是一个有用的分类。
-
@NathanHughes 请从问题中删除重复标记,或添加一些正确答案链接,这将直接回答我的问题。
-
为什么会有两个函数用相同的参数做同样的事情?如果您需要在不同情况下添加两个不同的函数,您可以重载它,或者扩展类并为不同的对象实现不同的功能。你的例子没有意义@Hayk Melqonyan。在现实世界的图书馆中找到一个照你说的做的例子。
标签: java oop polymorphism overloading static-polymorphism