多态
意义:
- 同一类型的引用指向不同的对象时,有不同的实现
行为的多态:cut(),run()
abstract class 人{
abstract void cut();
}
class 理发师 extends 人{
void cut(){ 剪发 }
}
class 外科医生 extends 人{
void cut(){ 开刀 }
}
class 演员 extends 人{
void cut(){ 停止表演 }
}
abstract class 动物{
abstract void run();
}
class 老虎 extends 动物{
void run(){地上跑}
}
class 鸟 extends 动物{
void run(){天上飞}
}
class 鱼 extends 动物{
void run(){水里游}
}
- 同一对象被造型为不同的类型时,有不同的功能
对象的多态:我,水
我 me = new 我();
讲师 p1 = me;
孩子他妈 p2 = me;
老公的老婆 p3 = me;
向上造型:
- 父类型的引用指向子类的对象
- 能造型成的类型有:
父类型、实现的接口 - 能点出来什么,看引用类型
强制类型转换
成功的条件:
- 引用所指向的对象,就是该类型
- 引用所指向的对象,实现了该接口
建议强转之前通过instanceof来判断引用是否是某种类型
instanceof返回boolean结果
强转成功的条件就是它为true的条件 - eg:
interface Inter1{
}
class Aoo{
}
class Boo extends Aoo implements Inter1{
}
class Coo extends Aoo{
}
public static void main(String[] args) {
Aoo o1 = new Boo();//向上造型
Boo o2 = (Boo)o1;//引用所指向的对象,就是该类型
Inter1 o3 = (Inter1)o1;//引用所指向的对象,实现了该接口
//Coo o4 = (Coo)o1;//ClassCastException类型转换异常
if(o1 instanceof Coo) {//false
Coo o5 = (Coo)o1;
}
System.out.println(o1 instanceof Boo);//true
System.out.println(o1 instanceof Inter1);//true
System.out.println(o1 instanceof Coo);//false
}