什么是多态性,简单解释一下?

时间:2015-04-24 16:51:17

标签: definition

我知道这是一个重复的问题和一点点"软"但是我不喜欢那里的任何其他解释,并希望听到一个简单的回答,而不是一般的混淆。

例如What is polymorphism, what is it for, and how is it used?

多态性是否能够执行接口的函数(或方法?),例如在不同数据类型的对象(如整数,浮点数等)上添加,减去等等。 ?

它基本上是运营商重载吗?还是模板?

3 个答案:

答案 0 :(得分:2)

多态性只是一个奇特的词,这意味着您可以使用更通用的术语来引用特定类型的对象。

接口

密切相关

界面:相同的词,几种口味

而不是说"我有一个新的Vauxhall Corsa",你可以简单地说'#34;我有一辆新车"。如果您刚刚购买了福特嘉年华,那么这句话也是如此,因为它也是一辆汽车。英语单词' car'的灵活性(多态性)。意味着您不必确切地指定它是哪种类型的汽车。您的观众会知道您的前驱车上有一个现代装置,即使沃克斯豪尔和福特发动机的确切机制可能彼此不同,也会设计为嘟嘟嘟嘟,驾驶并沿着道路行驶。

多态性采用此界面,让您将福特嘉年华简称为汽车:

Car car = new Ford();

来自this blog:

  

多态性是指使用超类变量来引用子类   宾语。例如,考虑这个简单的继承层次结构和   代码:

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!");
    }
}

通过覆盖父类方法,DogHorse类都可以修改它们的eat()方法,而通过调用强制转换为超类{{1}可以更一般地使用它们}。

Animal

正如Sanke所说,这只是方法重载和方法覆盖。