3 回答

TA贡献1712条经验 获得超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
}
}

TA贡献1803条经验 获得超6个赞
方法重载将是静态多态的一个例子
而重写将是动态多态的一个例子。
因为,在重载的情况下,编译时编译器知道链接到调用的方法。但是,在运行时确定动态多态性

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