多态
-
多态的意义
- 同一类型的引用指向不同的对象时,有不同的实现
-------行为的多态:cut()、step()、getImage()… - 同一对象被造型为不同的类型时,有不同的功能
-------对象的多态:我、你、水…
- 同一类型的引用指向不同的对象时,有不同的实现
-
向上造型/自动类型的转换
- 超类型的引用指向派生类的对象
- 能造型成为的类型有:超类+所实现的接口
- 能点出来什么,看引用的类型
-
强制类型转换,成功的条件只有如下两种:
- 引用所指向的对象,就是该类型
- 引用所指向的对象,实现了该接口或继承了该类
-
强转时若不满足如上条件,则发生ClassCastException类型转换异常
建议:在强转之前先通过instanceof来判断引用指向的对象是否是该类型 -
多态
-
意义:行为的多态(所有抽象方法都是多态的),对象的多态(所有对象都是多态的)
-
向上造型、强制类型转换、instanceof
-
多态的表现形式:重写
-
示例:
Aoo o = new Boo();
Boo o1 = (Boo)o; //符合条件一
Inter1 o2 = (Inter1)o; //符合条件二
Coo o3 = (Coo)o; //ClassCastException类型转换异常
if(o instanceof Coo){ //false
Coo o3 = (Coo)o;
}
System.out.println(o instanceof Boo); //true
System.out.println(o instanceof Inter1); //true
System.out.println(o instanceof Coo); //false
interface Inter1{ }
class Aoo{ }
class Boo extends Aoo implements Inter1{ }
class Coo extends Aoo{ }
示例多态:
cut()就是多态的
人 p1 = new 理发师();
人 p2 = new 外科医生();
人 p3 = new 演员();
p1.cut(); //剪发
p2.cut(); //开刀
p3.cut(); //停止表演
abstract class 人{
abstract void cut();
}
class 理发师 extends 人{
void cut(){ 剪发 }
}
class 外科医生 extends 人{
void cut(){ 开刀 }
}
class 演员 extends 人{
void cut(){ 停止表演 }
}