我知道这是一个重复的问题和一点点"软"但是我不喜欢那里的任何其他解释,并希望听到一个简单的回答,而不是一般的混淆。
例如What is polymorphism, what is it for, and how is it used?
多态性是否能够执行接口的函数(或方法?),例如在不同数据类型的对象(如整数,浮点数等)上添加,减去等等。 ?
它基本上是运营商重载吗?还是模板?
答案 0 :(得分:2)
多态性只是一个奇特的词,这意味着您可以使用更通用的术语来引用特定类型的对象。
与接口
密切相关界面:相同的词,几种口味
而不是说"我有一个新的Vauxhall Corsa",你可以简单地说'#34;我有一辆新车"。如果您刚刚购买了福特嘉年华,那么这句话也是如此,因为它也是一辆汽车。英语单词' car'的灵活性(多态性)。意味着您不必确切地指定它是哪种类型的汽车。您的观众会知道您的前驱车上有一个现代装置,即使沃克斯豪尔和福特发动机的确切机制可能彼此不同,也会设计为嘟嘟嘟嘟,驾驶并沿着道路行驶。
多态性采用此界面,让您将福特嘉年华简称为汽车:
Car car = new Ford();
多态性是指使用超类变量来引用子类 宾语。例如,考虑这个简单的继承层次结构和 代码:
abstract class Animal {
abstract void talk();
}
class Dog extends Animal {
void talk() {
System.out.println("Woof!");
}
}
class Cat extends Animal {
void talk() {
System.out.println("Meow.");
}
}
Polymorphism允许您在一个中保存对Dog对象的引用 Animal类型的变量,如:
Animal animal = new Dog();
PS鉴于其他答案,您可能还想知道the difference between an abstract class and an interface。
答案 1 :(得分:1)
通常,能够以多种形式出现。在面向对象的编程中,多态性是指编程语言根据数据类型或类别不同地处理对象的能力。更具体地说,它是重新定义派生类的方法的能力。例如,给定基类形状,多态性使程序员能够为任意数量的派生类定义不同的区域方法,例如圆形,矩形和三角形。无论对象是什么形状,对它应用区域方法都会返回正确的结果。多态性被认为是任何真正的面向对象编程语言(OOPL)的要求。
简单的方法重载和方法覆盖......
答案 2 :(得分:0)
一个简单但易于理解的Java示例:
public class Animal {
public void eat() {
System.out.println("wow!");
}
}
public class Horse extends Animal {
public void eat() {
System.out.println("iiiihhh!");
}
}
public class Dog extends Animal {
public void eat() {
System.out.println("whoa!");
}
}
通过覆盖父类方法,Dog
和Horse
类都可以修改它们的eat()
方法,而通过调用强制转换为超类{{1}可以更一般地使用它们}。
Animal
正如Sanke所说,这只是方法重载和方法覆盖。