class 毕姥爷{
void 讲课(){
System.out.println("政治");
}
void 钓鱼(){
System.out.println("钓鱼");
}
}
class 毕老师 extends 毕姥爷{
void 讲课(){
System.out.println("JAVA");
}
void 看电影(){
System.out.println("看电影");
}
}
public class Test{
public static void main(String[] args){
毕姥爷 b=new 毕老师();
b.讲课();
b.钓鱼();
毕老师 bi=(毕老师)b;
bi.看电影();
}
}
这是毕老师教学视频中的案例,对于这句语句:毕姥爷 b=new 毕老师();是向上转型,也就相对于毕老师
化妆成毕姥爷(他父亲),这个时候毕姥爷的同事来找毕姥爷来讲课,此时,该同事就会把毕老师当成父亲,然后要求
毕姥爷去讲课,这个时候毕老师虽然化妆成他的父亲,但是他讲课的时候只会讲自己会的,那就是JAVA,此时我们称
之为覆盖操作,这就是多态中成员函数的特点。
此时,如果想要使用毕老师特有的属性功能,那么就要向下转型:毕老师 bi=(毕老师)b;这就相当于毕老师
回家卸妆以后的情况了,卸妆以后,毕老师就可以调用自己的特有方法。
总结:多态向上转型的作用:(1)不能访问子类中的特有方法。如:b不能调用看电影的方法(2)提高了扩展性
如:毕姥爷家的儿子都可以化妆成毕姥爷,便于扩展功能的使用。
多态向下转型的作用:为了使用子类中的特有方法。如:bi可以调用看电影的方法
|