Java中的动态多态性和静态多态性有什么区别?

任何人都可以提供一个简单的例子来解释Java中动态多态性和静态多态性之间的区别吗?


答案 1

多态性

1. 静态绑定/编译时绑定/早期绑定/方法重载。(同一类)

2. 动态绑定/运行时绑定/后期绑定/方法覆盖。(不同班级)

重载示例:

class Calculation {  
  void sum(int a,int b){System.out.println(a+b);}  
  void sum(int a,int b,int c){System.out.println(a+b+c);}  

  public static void main(String args[]) {  
    Calculation obj=new Calculation();  
    obj.sum(10,10,10);  // 30
    obj.sum(20,20);     //40 
  }  
}  

覆盖示例:

class Animal {    
   public void move(){
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {

   public void move() {
      System.out.println("Dogs can walk and run");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal a = new Animal(); // Animal reference and object
      Animal b = new Dog(); // Animal reference but Dog object

      a.move();//output: Animals can move

      b.move();//output:Dogs can walk and run
   }
}

答案 2
  • 方法重载将是静态多态性的一个例子

  • 而覆盖将是动态多态性的一个例子。

    因为,在重载的情况下,编译器在编译时知道要链接到调用的方法。但是,它是在运行时确定的动态多态性