多态中的向上转型和向下转型

多态的好处:
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:类型转换异常
一般在多态的向下转型中容易出现 //父类强转子类会有问题的,尤其是父类是泛型定义的 如果子类定义的时候已经指定类型石灰报错的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值