java为什么可以通过继承父类的公有方法访问父类的私有属性

父类引用指向子类对象,再通过子类对象的特殊结构指针找到子类的方法表,在通过方法表中的指针找到方法的实际地址。方法表是个数组,排列方法顺序是先父后子,而且没有父类的私有方法... 父类引用指向子类对象,再通过子类对象的特殊结构指针找到子类的方法表,在通过方法表中的指针找到方法的实际地址。方法表是个数组,排列方法顺序是先父后子,而且没有父类的私有方法。如果我将子类对像附给父类引用,再调用继承来的父类公有方法访问父类私有方法是可行的。但问题是子类的方法表中并没有父类的私有方法,那父类的公有方法是怎么访问到父类的私有方法的呢? 如果说是继承了但子类不可见,那如果我在父类的父类里定义相同的私有方法岂不是会被先调用,这也与现实结果不复合?求解答。 展开
 我来答
Nor_yourgodsy
2015-10-27 · TA获得超过1.8万个赞
知道大有可为答主
回答量:3659
采纳率:82%
帮助的人:278万
展开全部
java中子类本来就可以通过继承公共方法访问父类的私有变量啊,
就算不是父子关系,一个类也可以通过另一个类的公共方法访问它的私有变量了。
子类是访问了父类的方法,记住是方法而不是属性
父类的方法操作了私有属性,这跟子类没有任何关系
百度网友845f74e61
2011-12-16 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1573万
展开全部
访问权限是出于安全性

你调用父类的方法,想当于地方机构向上级机构交个申请,你不需要知道上级里有多少个部门(方法),给过多少个人(变量)。那些是你指挥不到的。

公开和友好的方法可以被重写,如果需要调用父类同名的方法,需要用super.method来指定
私有方法,只能在本类里使用,你子类并不知道父类有没有调用。
象你说的父类的父类中的私有方法,没有被定调用的话,是不会被执行的。关于这块,不是很明白你想问什么。
你看一下面的代码,有什么疑惑,指出来。

class A {
public void method1() {

}

private void method2() {
// no call
}
}

class B extends A {

public void method1() {
super.method1(); // call A class method
method2();
}

private void method2() {

}
}

class C extends B {
public void method() {
method1(); // call B class method
}
}
追问
或者这样说吧,为什么多态机制只覆盖方法,而不覆盖属性。
追答
不太好说.但属性覆盖的话,问题很多.
属性出现的重复的可能性很大.如果你覆盖了值,就不能保证唯一性了吧

重写方法,还可以做功能扩展.
从机制上,不会说.

但用起来会不知道这个变量的值,是不是你想要的那个.就是这样.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
渴求一杯蓝山
2011-12-16 · TA获得超过217个赞
知道小有建树答主
回答量:284
采纳率:0%
帮助的人:214万
展开全部
主要是为了安全性和提高代码的利用率。
追问
这只能解释访问控制存在的原因,因为设计中需要多态,所以有了继承,为何继承中只存在方法覆盖不存在属性覆盖呢??
追答
我们每个类的属性前面都会写上private,再写set,get方法,这样我们就可以用这两个方法来设置属性,方法覆盖只是让后面实现更多的功能
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式