Java 所有动态绑定都是一种多态性吗?

Java 所有动态绑定都是一种多态性吗?,java,inheritance,polymorphism,terminology,dynamic-binding,Java,Inheritance,Polymorphism,Terminology,Dynamic Binding,是否所有动态绑定都被认为是多态性?具体来说,我说的是Java。如果不是,请解释这两个术语 我所知道的是:并非所有的继承都是多态性,但所有多态性都使用继承。首先(或后期绑定)是一个不恰当的术语。你说的是另一回事 动态绑定是选择在运行时调用方法的哪个实现,但这在Java中不会发生。但是您有动态分派功能,它能够在编译时选择方法的正确多态实现(这通常转化为选择方法/函数的最专业的版本) 但我不会说动态调度就是多态性,我会说为了支持多态性,您需要一种机制来选择方法的正确实现,这就是动态调度 继承是一种称为

是否所有动态绑定都被认为是多态性?具体来说,我说的是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);
}