多态
多态
先看代码:
package com.happy.oop.demo04;
public class Demo1 {
public static void main(String[] args) {
Dog dog1 = new Dog(); //正常创建一个对象
Animal dog2 = new Dog(); //这就是多态
dog1.shout();
dog2.shout();
}
}
运行结果:

Animal类:
package com.happy.oop.demo04;
public class Animal {
public void shout() {
System.out.println("动物叫了一声");
}
}
Dog类:
package com.happy.oop.demo04;
public class Dog extends Animal {
@Override
public void shout() {
System.out.println("汪汪汪");
}
}
再来看百度百科
在编程语言和类型论中,多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。 多态类型(英语:polymorphic type)可以将自身所支持的操作套用到其它类型的值上。
一般Java实现多态有3个条件:继承、重写、向上转型
另外可以看到,Dog dog1对应的dog1.shout();输出了"汪汪汪",这是没有疑问的,但是,Animal dog2对应的dog2.shout();居然也输出了"汪汪汪",这就体现了多态,即父类的引用指向了子类对象。
关于多态代码的执行有一句话可以用来简记:编译看左边,运行看右边。
为什么要用多态呢?举个例子,老板说准备开发一款动物机器人,然后说这款动物机器人有叫、走路、睡觉、撒娇等等功能,但具体是什么动物呢,还没有确定,等确定再通知你们硬件部和软件部。硬件部可能只能采购一些简单的元器件,做一下简单的测试,而软件部就不一样了,软件部先Animal animal = new Animal();把基本的工作干完了,等老板确定什么动物后,该狗动物就修改Animal animal = new Dog();就行,该猫动物就修改Animal animal = new Cat();就行,代码就完成,再也不用熬夜通宵了,又可以继续摸鱼了,而硬件部的工作可能才刚刚开始。


浙公网安备 33010602011771号