[问题] is-a的意义

楼主: lueichun (no anonymous)   2018-05-03 21:05:15
在讲解继承语法的文章内
都会讲到子类别复制了父类别的内容
然后子类别又能去override从父类别复制过来的东西 并新增父类别没有的东西
然后子类别就is-a父类别
但我不懂的是
既然子类别复制父类别的东西 会去修改它
然后又会增加新的 专属于自己的东西
那为什么还可以说子类别is-a父类别
说子类别包含(include)父类别不是比较合理?
介绍相关议题的文章 通常是直接举例说明
例如父类别是动物 子类别是猫 狗
但总觉得用这样的例子来说明 有种以偏概全的FU
不知道有没有更general的解释?
作者: yuxds (cody)   2018-05-03 21:32:00
我觉得不能说是以偏概全 而是那样的情况你才会用继承不会说 我要一台跑车 然后跑车去继承动物类别再改写内容我觉得你可以举个例子怎样的情况是你会用继承 然后用子包含父类别是听起来很顺的
作者: LPH66 (-6.2598534e+18f)   2018-05-03 23:54:00
is-a 这个名字会这么叫就是用英文的 is a 连起来表示关系狗 is a 动物 ← 像是这种关系也就是说动物能做的事狗也能做, 虽然怎么做可能不尽相同你需要动物做事的地方你可以抓一只狗来
作者: ssccg (23)   2018-05-04 02:30:00
修改是指改内部的实作,对外的接口是不能变的对外部来说,就可以把子类别的物件当成父类别的物件来用子类别的物件就是一个(is-a)父类别的物件物件导向的封装就是只看公开接口,去想里面怎么做的就偏了对compiler或interpreter来说要实作这种设计当然会变成内存里子类别的那份里面要放一份父类别的东西,但是那不是你时要去担心的事
作者: pttworld (批踢踢世界)   2018-05-04 10:21:00
那是你取名叫跑车,取名黑豹不就是了另一点因为继承动物,你的跑车只会有动物的特性不会因为他叫跑车就多了引擎和轮子即使你在跑车类新增引擎轮子,他只是像动物的跑车
作者: ssccg (23)   2018-05-04 10:46:00
以你的例子来说,假设跑车继承动物(用哺乳动物比较单纯)这个跑车外显行为一定有会呼吸、两性生殖、会哺乳..等继承了什么就决定了它是什么你会说出跑车继承动物其实观念就有问题,不是先有两个类别再去套继承关系,是先有父类别,子类别一定是其衍生
作者: gmoz ( This can't do that. )   2018-05-04 16:04:00
请从用途跟需求出发

Links booklink

Contact Us: admin [ a t ] ucptt.com