永发信息网

为什么子类的原型要指向父类的实例而不是父类的原型

答案:2  悬赏:70  手机版
解决时间 2021-03-03 09:04
为什么子类的原型要指向父类的实例而不是父类的原型
最佳答案
以你的例子为例,类student是person的子类,所以从数据结构关系上讲,student不但拥有person即父类的一切特性还有着自身特有的属性。而在存储区域上student的分布则是区域的开始部分是父person类的所有数据,然后是student类自身的特有属性。所以他们的关系就是子类的数据是在父类的数据后面加上了一些自己的特性。既然如此那么当我们使用子类实例化一个对象子后,那么这个对象同样也拥有了父类的所有特性,所以这时如果我们将这个子类的对象进行类型转化为父类的对象是完全可以的,为什么呢?因为子类的对象拥有父类的一切特性。而Person p = new Student()这个语句其实就相当于隐式声明了一个子类对象然后将其隐式转化为父类的类型。所以这里的p应该是父类person的对象。这样做的好处是比如你声明了一个接口或者抽象类,然后要使用他的实例化对象,但是抽象类是不能直接实例化的,所以就需要靠子类来帮忙了。
全部回答
以前我在看书时也遇到过这样的问题,找了很多资料都没有明确的解释。 我觉得,并不是语法上不能实现对构造函数的参数传递,而是这样做不符合面向对象编程的规则:对象(实例)才是属性的拥有者。 如果在子类定义时就将属性赋了值,对象实例就不能再更改自己的属性了。这样就变成了类拥有属性,而不是对象拥有属性了。 举个例子,子类 children 继承父类 parents,parents 构造函数: function parents(name){ this.name=name; } 使用原型链并给父类构造函数传参数: children.prototype=new parents("hello"); 那么此时,children 类就拥有了 name=“hello” 属性,而 children 类的实例对象 c1、c2、c3 等等只能被迫接受这个 name 属性。children 是 "hello" 的拥有者而 c1、 c2、c3不是! 如此写完全失去了面向对象编程的意义,所以在原型链继承方式中规定不能对父类构造函数传递参数。也因为这个原因,原型链继承方式并不实用。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
延长壳牌加油站(雄州大道)地址有知道的么?有
荷兰小画派
大自然地板龙江店怎么去啊,有知道地址的么
王濛退役了?
索菲酒堡地址有知道的么?有点事想过去
排卵期同房后左下腹疼
2013年5月29日,我国最大猪肉加工企业双汇国
张家港市凤凰异型铆钉厂这个地址在什么地方,
张雪迎关晓彤天天比谁最漂亮,但我觉得这俩人
韩国明星 网红 用的什么手机 就是照出来的照
我有一个朋友是幼师工作,微信聊天有时不融洽
朝鲜的钱叫什么
从王顶堤坐什么车到南开社保中心
黑茶微商体验店在哪里啊,我有事要去这个地方
本人,17岁,女生,不是学生,想染头发,不知
推荐资讯
龙飞图文这个地址在什么地方,我要处理点事
新青公安分局汤北派出所这个地址在什么地方,
太阳东升起点人 打一成语
常熟市民丰塑料厂这个地址在什么地方,我要处
安徽邮电职业技术学院-实训楼地址在什么地方
下列货币指标中,流动性最弱的是()。A.年度
独特反义词说三个或三个以上.
地牢公司怎么玩地牢公司玩法技巧分享
美杰新语怎样打开USB
该图中的①②③④四图是某大陆从历史时期至今
酱香型白酒好喝吗
梦见坏人追
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?