Java 所有动态绑定都是一种多态性吗?
是否所有动态绑定都被认为是多态性?具体来说,我说的是Java。如果不是,请解释这两个术语 我所知道的是:并非所有的继承都是多态性,但所有多态性都使用继承。首先(或后期绑定)是一个不恰当的术语。你说的是另一回事 动态绑定是选择在运行时调用方法的哪个实现,但这在Java中不会发生。但是您有动态分派功能,它能够在编译时选择方法的正确多态实现(这通常转化为选择方法/函数的最专业的版本) 但我不会说动态调度就是多态性,我会说为了支持多态性,您需要一种机制来选择方法的正确实现,这就是动态调度 继承是一种称为(或子类型多态性)的多态性,因此,与您所说的相反,继承始终是多态性的一种形式,但也存在其他类型的多态性,请考虑:Java 所有动态绑定都是一种多态性吗?,java,inheritance,polymorphism,terminology,dynamic-binding,Java,Inheritance,Polymorphism,Terminology,Dynamic Binding,是否所有动态绑定都被认为是多态性?具体来说,我说的是Java。如果不是,请解释这两个术语 我所知道的是:并非所有的继承都是多态性,但所有多态性都使用继承。首先(或后期绑定)是一个不恰当的术语。你说的是另一回事 动态绑定是选择在运行时调用方法的哪个实现,但这在Java中不会发生。但是您有动态分派功能,它能够在编译时选择方法的正确多态实现(这通常转化为选择方法/函数的最专业的版本) 但我不会说动态调度就是多态性,我会说为了支持多态性,您需要一种机制来选择方法的正确实现,这就是动态调度 继承是一种称为
- (通过重载实现)相同的函数在应用于不同的参数时具有不同的含义
- (用Java中的泛型实现)如果您有带有类型变量的类型,那么单个类型可以通过将变量绑定到特定类型(或一类类型)来表示无限多的类型,请考虑
List
public static void eat (Veg vegetable) {
System.out.println("I am vegetarian");
}
public static void eat(Meat meat) {
System.out.println("I am non-vegetarian");
}
//if your main is this way
public static void main(String args[])
{
Veg v = new Meat();
callEat(v);
}
上面印着“我是素食主义者”。这是由编译器在运行时决定的。它也被称为方法重写
int add (int a , int b){
return a+b;
}
int add(int a, int b, int c){
return a+b+c;
}
void main (){
add(1,2);
add(1,2,3);
}
这里,即使方法的名称和返回类型相同,也会根据传递的参数选择函数。这是在编译时完成的。这是静态多态性。它也称为方法重写
int add (int a , int b){
return a+b;
}
int add(int a, int b, int c){
return a+b+c;
}
void main (){
add(1,2);
add(1,2,3);
}