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

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



千万里不及你
浏览 1306回答 3
3回答

交互式爱情

多态性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   }}

慕码人8056858

方法重载将是静态多态的一个例子而重写将是动态多态的一个例子。因为,在重载的情况下,编译时编译器知道链接到调用的方法。但是,在运行时确定动态多态性

白衣染霜花

动态(运行时)多态性是运行时存在的多态性。这里,Java编译器不了解在编译时调用哪个方法。只有JVM决定在运行时调用哪个方法。使用实例方法的方法重载和方法重写是动态多态的示例。例如,考虑一个序列化和反序列化不同类型文档的应用程序。我们可以将'Document'作为基类,并从中派生出不同的文档类型类。例如XMLDocument,WordDocument等。Document类将'Serialize()'和'De-serialize()'方法定义为virtual,每个派生类将根据文档的实际内容以自己的方式实现这些方法。当需要序列化/反序列化不同类型的文档时,文档对象将由“Document”类引用(或指针)引用,并且在调用“Serialize()”或“De-serialize()”方法时在其上,调用适当版本的虚拟方法。静态(编译时)多态性是编译时显示的多态性。这里,Java编译器知道调用哪个方法。使用静态方法重载方法和方法重写; 使用私有或最终方法重写的方法是静态多态的示例例如,员工对象可能有两个print()方法,一个不带参数,另一个带前缀字符串以及员工数据。给定这些接口,当在没有任何参数的情况下调用print()方法时,查看函数参数的编译器知道要调用哪个函数,并相应地生成目标代码。有关详细信息,请阅读“什么是多态”(Google it)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java