-
定义
-
相同的行为,不同的实现
-
一个对象有多种的形式的能力
-
-
分类
-
静态多态
-
编译时系统决定调用
-
使用重载实现
-
-
-
动态多态
-
运行时实现
-
使用动态绑定和重写实现
-
-
-
-
动态多态技术
-
向上转型技术
-
定义:
-
一个父类的引用变量可以指向不同的子类对象
-
一个子对象可以被当做一个父类类型
-
-
-
System.out.println("选择您想要创建的动物:\t\n1.狗\t\n2.猫\t\n3.八戒\t\n");
Scanner scanner = new Scanner(System.in);
@SuppressWarnings("unused")
Animal ani;
String sc = scanner.next();
switch (sc) {
case "1":
ani = new Dog();
break;
case "2":
ani = new Cat();
break;
case "3":
ani = new Pig();
break;
default:
ani = new Animal();
break;
}
-
instanceof关键字
-
动态绑定技术
-
运行时根据父类的引用变量所指的实际类型执行相应的方法
-
if(ani instanceof Dog)
{
((Dog) ani).eatBone();
}else if(ani instanceof Cat )
{
((Cat) ani).catchMouse();
}else if (ani instanceof Pig) {
((Pig) ani).done();
}
动态多态利用---动态参数(equals的重写)
@Override
/**
* 重写equals方法
*/
public boolean equals(Object equ) {
// 先判断传入的对象和当前类的对象是否为同一个地址值
// if(this == equ)
// return true;
if (equ == null)
return false;
overEqu equ1;
// 如果类型匹配,转换当前传入的对象类型
if (equ instanceof overEqu) {
equ1 = (overEqu) equ;
if (equ1.name.equals(this.name) && this.age == equ1.age && equ1.sex.equals(this.sex))
return true;
else
return false;
}
return false;
-
动态多态利用---异构集合
/**
* 异构集合
* 不同子类对象通过向上转型放在一个父类对象数组当中
* 一个动物集合可以是狗、猫、猪都被放在同一个数组当中
*/
Animal arran[] = new Animal[20];
arran[0] = new Dog();
arran[1] = new Cat();
arran[2] = new Pig();