在面向对象程序语言中,多态的是一项重要的基本特征。通过多态的技术可以在程序设计中,使得程序设计更为简单,清晰。比如动物有猫,狗,猪等等。除去它们所特有的特点以外,他们也存在共性,比如都会进食,休息,行走等行为。那么在OOP中,多态从此所引入的。

0.向上转型

在程序设计的过程中我们不知道所操作对象的具体行为,但是知道它所拥有的行为。比如就动物而言,在编写程序的过程中我们知道,猫吃鱼,狗吃肉。但是动物吃什么是我们不知道的。但在面向过程设计中,会采用判断对象类型,然后根据类型选择调用吃什么。在OOP中,这种问题解决轻而易举。

代码栗子🌰

class Animal {
public void food() {
}

public void sleep() {
}
}

class Cat extends Animal {
public void food() {
System.out.println("Eat fish");
}

public void sleep() {
System.out.println("Cat sleep");
}
}

class Dog extends Animal {
public void food() {
System.out.println("Eat meet");
}

public void sleep() {
System.out.println("Dog sleep");
}
}

public class temp {
public static void howToEat(Animal a) {
a.food();
}

public static void howToSleep(Animal a) {
a.sleep();
}

public static void main(String[] args) {
Dog d = new Dog();
Cat c = new Cat();
howToEat(d);
howToEat(c);
howToSleep(d);
howToSleep(c);
}
}
//result:
//Eat meet
//Eat fish
//Dog sleep
//Cat sleep

从上面的例子我们不难看出,如果加入一个新的类型比如Pig,那么直接创建新的类,并覆盖food和sleep方法就可以。如果在面向过程语言设计中,每当引入一个新的类型,那么就要增加一个新的函数,然后再加入到主函数中。这样维护起来的成本会大大增加。而多态的出现,在howToEat和howToSleep函数中的参数直接设置成基类类型,在真正的对象调用的时候,程序语言会根据对象的真实类型所去调用其自身的方法。


1.向下转型

2.继承与多态设计