Re: [问题]参考变量的问题

楼主: aoksc (重出江湖)   2017-12-27 00:12:04
※ 引述《wwe90425 (撒尿牛丸)》之铭言:
: 假设:
: class A{
: }
: class B:A{
: public B{}
: public MethodB_1{}
: }
: 假设有两个类别A&B
: B继承自A
: 请问:
: A _a = new B()
: 这样宣告有什么用途吗?
: 今天有做过实验
: 宣告完后
: _a也无法用子类别的方法(但还是会执行B的建构子)
你就想像飞机就是A类别
战斗机、运输机、客机都是继承自飞机的B、C、D…类别
那么当你只知道某个东西是飞机时(A _a = new B(); 就是你把B物件当成飞机看)
你怎么会知道他其实是可以发射飞弹的?
这个东西其实就是战斗机
只是你是用飞机的观点(A类别)去看他
所以你只知道他会飞
因为他是飞机所以他必定有飞机的功能
(因为他继承自A类别所以他必定有A类别的method)
但不知道他会发射飞弹这很正常吧(所以你不能用子类别的方法,除非强制转型回战斗机)
: 那干嘛不直接宣告 A _a = new A
你可能遇到一种情况是遇到B、C、D、E…类别都继承自A的情况
那么如果我给你一个装有B、C、D、E物件的List或Array
我要这些物件都执行一个继承自A的method
请问我要怎么用最简单的方式去执行这个继承自A的method呢?
那当然就是你说的A _a = new B();
我可以写个foreach把每个object取出来assign给A _a
我根本不需要管A _a = 的右边是什么
因为只要型别正确
他一定有A类别公开的method
那么我就可以从A类别的观点去操作这个这些物件
或者是可以设计某个method的参数就是A类别的型别
那么继承自A类别的B、C、D、E物件就一定能传给这个方法去使用
这个就是物件导向的三大特性之一多型
作者: wwe90425 (撒尿牛丸)   2016-01-04 08:00:00
感谢您的回复!原来这就是多型!

Links booklink

Contact Us: admin [ a t ] ucptt.com