A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.父类引用指向子类对象,再通过子类对象的特殊结构指针找到子类的方法表,在通过方法表中的指针找到方法的实际地址。方法表是个数组,排列方法顺序是先父后子,而且没有父类的私有方法。如果我将子类对像附给父类引用,再调用继承来的父类公有方法访问父类私有方法是可行的。但问题是子类的方法表中并没有父类的私有方法,那父类的公有方法是怎么访问到父类的私有方法的呢?  如果说是继承了但子类不可见,那如果我在父类的父类里定义相同的私有方法岂不是会被先调用,这也与现实结果不复合?
2.继承来自多态的需要,为何在继承时选择覆盖父类方法而不是像属性一样去隐藏父类方法呢?

评分

参与人数 1技术分 +2 收起 理由
admin + 2 这问题是深入思考的,值得多加.

查看全部评分

4 个回复

倒序浏览
1、私有化只用来操作数据的安全性,有些数据或者方法被调用者操作会出现安全隐患,所以这些成员私有化。子类继承父类时,私有的方法并没有被继承,就算拿到了父类的引用指向子类对象,也不能访问父类的私有方法。父类中的公有方法能访问父类中的私有方法,就是因为他们同属一个类,私有的作用范围足够访问到。
2、覆盖方法是因为:子类要用到与父类相同的功能,但是功能内部的实现方式是子类自己的一套,为了提高代码的复用性而选择了覆盖
回复 使用道具 举报
给了2分的技术分的题。。。。。。
我试一试,首先,明确一点是子类继承父类,
子类里肯定是继承了父类中所有成员,不管它是不是私有,
只不过私有不可见,你说子类的方法表中没有父类的私有方法,对于方法表是第一次听说,
所以无法按照这个思路去给你答案
但是我可以试着按照我的思路,父类的方法其实是,有this,和super指针的
当父类的公有方法内部调用父类私有方法时,前面其实是引去了this,
那么内部是怎么判断,前面应该加的是this,还是super呢?
我个人认为首先是加this,如果this指向的类中有该方法就调用
如果发现this指向的类中没有该方法,再加super去父类中找有没有该方法
至于第2个问题,功力尚浅,无能为力
回复 使用道具 举报
父类的私有属性和私有方法,子类是不能访问的,当然一些父类的私有属性可能可以通过相应的方法访问到,但是私有的方法似乎不能简单的访问,这里暂不考虑Java反射机制,在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。就像有些东西你可能拥有,但是你并不能使用。所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已.
回复 使用道具 举报
第一个   先说说第一个吧   我感觉java的好多问题可以从它的思想去理解    java是面向对象的   有三个特性  继承 封装  多态  这里说下封装  就是说 一个对象内部好多东西是外部不可见
            如私有的方法和变量  但在内部互相是是可见的  一个公共方法是可以访问一个私有方法的   不管这个公共方法是被谁调用  父类对象也好  子类对象也好   对子类而言呢  父类的
            私有方法我是调用不到的  但我可以通过公共方法去调用  就像一个人够不到树上的风筝  但竹竿可以够到  而不管是被谁拿着  难道你说这个风筝是我的  竹竿也只能给我用吗  
第二个   还是思想的理解   说继承是为了多态就太片面了   不用多态 继承就没用了吗  子类复写了父类的方法  不是说父类的方法就不能用了  在多态里父类引用调用同名静态函数  返回
            的不也是父类的吗   变量也是一样啊   谈不上隐藏
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马