首先来看什么是多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。

多态性是对象多种表现形式的体现。
多态的优点
- 消除类型之间的耦合关系;
- 可替换性;
- 可扩充性;
- 接口性;
- 灵活性;
- 简化性;
多态存在的三个必要条件
- 继承;
- 重写;
- 父类引用指向子类对象:Parent p = new Child();

1package com.zxy.demo.Test;
2
3public class DuoTai {
4 public static void main(String[] args) {
5 Shape s1 = new Circle();
6 Shape s2 = new Square();
7 Shape s3 = new Triangle();
8
9 s1.draw();
10 s2.draw();
11 s3.draw();
12 }
13}
14
15class Shape{
16 void draw(){}
17}
18
19class Circle extends Shape{
20 @Override
21 void draw() {
22 System.out.println("Circle.draw()");
23 }
24}
25
26class Square extends Shape {
27 @Override
28 void draw() {
29 System.out.println("Square.draw()");
30 }
31}
32
33class Triangle extends Shape {
34 @Override
35 void draw() {
36 System.out.println("Triangle.draw()");
37 }
38}
39
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
1package com.zxy.demo.Test;
2
3public class DuoTai1 {
4 public static void main(String[] args) {
5 show(new Cat());
6 show(new Dog());
7
8 Animal a = new Cat();
9 a.eat();
10 Cat c = (Cat) a;
11 c.work();
12 }
13 public static void show(Animal a){
14 a.eat();
15 if(a instanceof Cat){
16 Cat c = (Cat) a;
17 c.work();
18 } else if(a instanceof Dog){
19 Dog c = (Dog) a;
20 c.work();
21 }
22 }
23}
24
25abstract class Animal {
26 abstract public void eat();
27}
28
29class Cat extends Animal {
30 @Override
31 public void eat() {
32 System.out.println("吃鱼");
33 }
34
35 public void work(){
36 System.out.println("抓老鼠");
37 }
38}
39
40class Dog extends Animal {
41
42 @Override
43 public void eat() {
44 System.out.println("吃骨头");
45 }
46 public void work(){
47 System.out.println("看家");
48 }
49}
50
多态的实现方式
重写;
接口:
- 生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。
- java 中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。
抽象类和抽象方法。
为什么要使用多态
- 可替换性: 多态对已存在代码具有可替换性。例如,多态对水果类工作,对苹果,橙子也同样工作。
- 可扩充性: 多态对代码具有可扩充性,可扩充功能。新加子类更容易获得多态功能。例如,在实现苹果的多态基础上,很容易增添水果类的多态性。
- 接口性: 多态是超类通过方法签名,向子类提供了一个共同接口 ,由子类来完善或者覆盖它而实现的。
- 灵活性: 它在应用中有着灵活的操作,提高了工作效率 。
- 简化性: 多态简化代码编写 和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
(摘自菜鸟教程以及百度百科。)