标题:关于继承的一点疑问
只看楼主
悬崖之树
Rank: 2
等 级:论坛游民
威 望:1
帖 子:36
专家分:23
注 册:2013-5-1
结帖率:100%
 问题点数:0 回复次数:4 
关于继承的一点疑问
子类继承父类后,添加了自己的属性和方法,还重写了父类的一个方法。然后再子类的主方法中创建子类的对象,在调用属性和方法时发现如下规律:
      1 如果子类中存在要调用的方法(包括子类添加的和重写的,但是不包括继承来的),就会调用子类自己的方法,如果找不到,就在父类里找。
      2 如果调用的方法在子类里找到了,就会执行它,且会对子类的属性进行操作,这些属性包括自己添加的,但不包括继承的。如果在父类里找到了要调用的方法,就操作父类的属性。
      3 如果子类中的方法要操作的属性在子类中无法找到,就会操作父类里的同名属性(假设该属性可以继承)。
      4 如果父类里的方法调用了别的方法,且父类的主调方法在子类中没有被重写,被调用的方法在子类中被重写了,这时,子类对象调用方法时最后也会调用到子类重写的那个方法。
但是现在出现了一个问题,就是所有的类都是继承Object类,所有类的toString()方法都是在object类里定义的。这样就有问题了,如果子类对象调用toSring()方法,按照上面的规律,应该执行的是在子类对象中的Object对象的toString()方法。
            这个矛盾应该怎么破?

[此贴子已经被作者于2018-6-3 21:17编辑过]

搜索更多相关主题的帖子: 继承 子类 属性 方法 调用 
2018-06-03 20:58
有多难
Rank: 2
等 级:论坛游民
帖 子:39
专家分:39
注 册:2018-3-26
得分:0 
这有什么矛盾?在子类重写中重写toString()方法就可以调用子类自身的toString()方法了。还有一定要强调的是子类对象被实例化的时候确实调用了父类的构造方法,但“子类对象中的Object对象”这个说法是有问题的,因为创建一个子类对象的时候并没有创建一个父类实例,所以并不存在父类对象的实例。
2018-06-03 22:07
tengyuchong
Rank: 1
等 级:新手上路
威 望:1
帖 子:3
专家分:0
注 册:2018-6-4
得分:0 
如果不重写toString()方法 所有类都是默认调用object中的toString() 如果重写就调用重写的方法和你上边自己总结的规律不是一样的么
2018-06-04 15:50
悬崖之树
Rank: 2
等 级:论坛游民
威 望:1
帖 子:36
专家分:23
注 册:2013-5-1
得分:0 
回复 3楼 tengyuchong
如果没有重写toString方法,默认就调用Object类的toString方法。但是根据我上面总结的规律,父类的方法就操作父类的属性,这个toString方法是Object类的,所以返回的应该是父类的类名@hashcode才对,但是现在返回的是子类的类名@hashcode,这里就是矛盾。

[此贴子已经被作者于2018-6-5 19:41编辑过]

2018-06-05 19:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-487573-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.334748 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved