package com.itheima.demo18duotai;
public class Fu {
public void work(){
System.out.println("父亲在工作!");
}
}
package com.itheima.demo18duotai;
public class Zi extends Fu {
public void work(){
System.out.println("儿子在工作!");
}
//定义子类特有的玩游戏的方法
public void palyGame(){
System.out.println("儿子在玩游戏!");
}
}
package com.itheima.demo18duotai;
import com.itheima.demo13interface.C;
import com.itheima.demo17duotai.Animal;
import com.itheima.demo17duotai.Cat;
import com.itheima.demo17duotai.Dog;
/*
多态的转型:
1.向上转型:多态本身就是向上转型,把子类对象赋值给父类变量
格式:
父类类型 变量名 = new 子类对象();
double d = 10;
好处:
扩展性强:可以赋值不同的子类对象,调用不同子类重写后的方法
2.向下转型:把父类类型的变量强制转换为子类类型
前提:必须有多态
格式:
子类类型 变量名 = (子类类型)父类变量名;
int a = (int)8.8;
好处:
转换为子类类型之后,就可以使用子类特有的功能
*/
public class Demo01 {
public static void main(String[] args) {
//1.向上转型:多态本身就是向上转型,把子类对象赋值给父类变量
//父亲病了,儿子化妆为父亲,替父亲工作
Fu fu = new Zi();
fu.work();//儿子在工作!
//儿子替父亲工作完毕,想玩游戏,化妆为父亲,父亲没有玩游戏的方法
//fu.playGame();//Cannot resolve method 'playGame()'
//2.向下转型:把父类类型的变量强制转换为子类类型(强转)
//儿子卸妆,变化儿子的形态
Zi zi = (Zi)fu;
zi.palyGame();//儿子在玩游戏!
System.out.println("======================================");
//向下转型的前提必须是多态
Fu f2 = new Fu();
//ClassCastException: com.itheima.demo18duotai.Fu cannot be cast to com.itheima.demo18duotai.Zi
//Zi z2 = (Zi)f2;//类型转换异常:Fu类型不能转换为Zi
System.out.println("======================================");
Animal a = new Cat();//向上转型
Cat c = (Cat)a;//向下转型
c.catchMouse();
//ClassCastException: com.itheima.demo17duotai.Cat cannot be cast to com.itheima.demo17duotai.Dog
//Dog d = (Dog)a;//类型转换异常:猫不能转换为狗的类型
}
}