多态的好处:
A:提高了代码的维护性(继承保证)
B:提高了代码的扩展性(由多态保证)
父类是不能调用子类独有的方法的,如果想调用,那么只能父类转成子类 向下转型
public class ExtendTest {
class Father {
public int age = 40;
public void teach() {
System.out.println("讲解JavaSE");
}
}
class Son extends Father {
public int age = 20;
public void teach() {
System.out.println("教玩游戏");
}
public void playGame() {
System.out.println("英雄联盟");
}
}
public static void main(String[] args) {
ExtendTest test = new ExtendTest();
Father sonPlay = test.new Son(); //儿子装的
System.out.println(sonPlay.age);
sonPlay.teach(); //如果由子类向上转型的话,他只能干他父类能干的事,但是父类有的方法由于被继承,override了 所以他也就变成了玩游戏
Son son = (Son)sonPlay; //让他变回儿子
System.out.println(son.age);
son.teach();
son.playGame(); //因为向下转型,所以能调用了
}
}
输出结果:
40
教玩游戏
20
教玩游戏
英雄联盟
(我的理解:向上转型的过程中,方法被重写,所以能够是儿子的方法,但是变量还是超类的变量值)
2、向下转型中有可能的异常:
ClassCastException:类型转换异常
一般在多态的向下转型中容易出现 //父类强转子类会有问题的,尤其是父类是泛型定义的 如果子类定义的时候已经指定类型石灰报错的