黑马程序员技术交流社区
标题:
java为什么可以通过继承父类的公有方法访问父类的私有属性
[打印本页]
作者:
黑马潘浩
时间:
2013-3-10 23:38
标题:
java为什么可以通过继承父类的公有方法访问父类的私有属性
1.父类引用指向子类对象,再通过子类对象的特殊结构指针找到子类的方法表,在通过方法表中的指针找到方法的实际地址。方法表是个数组,排列方法顺序是先父后子,而且没有父类的私有方法。如果我将子类对像附给父类引用,再调用继承来的父类公有方法访问父类私有方法是可行的。但问题是子类的方法表中并没有父类的私有方法,那父类的公有方法是怎么访问到父类的私有方法的呢? 如果说是继承了但子类不可见,那如果我在父类的父类里定义相同的私有方法岂不是会被先调用,这也与现实结果不复合?
2.继承来自多态的需要,为何在继承时选择覆盖
父类方法而不是像属性一样去隐藏
父类方法呢?
作者:
熊冠银
时间:
2013-3-11 00:02
1、私有化只用来操作数据的安全性,有些数据或者方法被调用者操作会出现安全隐患,所以这些成员私有化。子类继承父类时,私有的方法并没有被继承,就算拿到了父类的引用指向子类对象,也不能访问父类的私有方法。父类中的公有方法能访问父类中的私有方法,就是因为他们同属一个类,私有的作用范围足够访问到。
2、覆盖方法是因为:子类要用到与父类相同的功能,但是功能内部的实现方式是子类自己的一套,为了提高代码的复用性而选择了覆盖
作者:
移动小坦克
时间:
2013-3-11 00:24
给了2分的技术分的题。。。。。。
我试一试,首先,明确一点是子类继承父类,
子类里肯定是继承了父类中所有成员,不管它是不是私有,
只不过私有不可见,你说子类的方法表中没有父类的私有方法,对于方法表是第一次听说,
所以无法按照这个思路去给你答案
但是我可以试着按照我的思路,父类的方法其实是,有this,和super指针的
当父类的公有方法内部调用父类私有方法时,前面其实是引去了this,
那么内部是怎么判断,前面应该加的是this,还是super呢?
我个人认为首先是加this,如果this指向的类中有该方法就调用
如果发现this指向的类中没有该方法,再加super去父类中找有没有该方法
至于第2个问题,功力尚浅,无能为力
作者:
张宁
时间:
2013-3-11 01:10
父类的私有属性和私有方法,子类是不能访问的,当然一些父类的私有属性可能可以通过相应的方法访问到,但是私有的方法似乎不能简单的访问,这里暂不考虑Java反射机制,在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。就像有些东西你可能拥有,但是你并不能使用。所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已.
作者:
amen0205
时间:
2013-3-11 04:55
第一个 先说说第一个吧 我感觉java的好多问题可以从它的思想去理解 java是面向对象的 有三个特性 继承 封装 多态 这里说下封装 就是说 一个对象内部好多东西是外部不可见
如私有的方法和变量 但在内部互相是是可见的 一个公共方法是可以访问一个私有方法的 不管这个公共方法是被谁调用 父类对象也好 子类对象也好 对子类而言呢 父类的
私有方法我是调用不到的 但我可以通过公共方法去调用 就像一个人够不到树上的风筝 但竹竿可以够到 而不管是被谁拿着 难道你说这个风筝是我的 竹竿也只能给我用吗
第二个 还是思想的理解 说继承是为了多态就太片面了 不用多态 继承就没用了吗 子类复写了父类的方法 不是说父类的方法就不能用了 在多态里父类引用调用同名静态函数 返回
的不也是父类的吗 变量也是一样啊 谈不上隐藏
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2