继承与多态的使用 & 编译错误和运行错误的分析

为了准备学校期中考试,特意复习了继承与多态各种情况的分析:

在instantiate一个物体(object)时,分别有两种类型需要注意:

  1. Actual type (这个object的实际类型,也可以叫做static type),这个类型是在代码编译期间用到的
  2. Dynamic type (这个类型是代码在run-time的时候用到的)
Animal a = new Dog();

在这行简单的代码中,Animal为actual type,Dog是dynamic type。这就是在使用多态了(polymorphism)
那么,我们使用多态的好处是什么呢:

  1. 在程序compile期间,a的类型是animal,也就是说如果a调用了一个方法,这个方法在animal class里面存在,那么就不会报错,如果不存在,就会报错。
  2. 在程序运行期间,a被当作dog type,所以被调用的方法也将是Dog class里面的

需要注意这么几点:
如果我们想用Dog class里面独有的方法,也就是说这些方法不是从Animal那边继承下来的,调用时需要先对a 进行 casting。如下:

((Dog)a).bark();

Downcasting 和 upcasting永远不会在编译期间报错,然而sidecasting在编译期间报错。
但是,不在编译期间保存并不以意味着在运行阶段不会报错。

总结如下:

  1. Static type决定了一个物体在编译期间被当作的类型
  2. Dynamic type决定了一个物体在运行阶段被当作的类型

这是我在CSDN第一篇原创文章,如有不对,请多多指教~!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值