在子类中,父类对象为什么不能访问父类的private属性

修电视的攻城狮 2010-09-14 03:04:48

class Father {
private int fage;
public int getFage() {
return fage;
}

public void setFage(int fage) {
this.fage = fage;
}

int fweight;
protected String fgender;
public int fheight;

public Father(int age, int weight, String gender, int height) {
this.fage = age;
this.fweight = weight;
this.fgender = gender;
this.fheight = height;
}

public Father() {}


}

public class FatherAndSon extends Father{

private int sage;
int sweight;
protected String sgender;
public int sheight;

public FatherAndSon(int age, int weight, String gender, int height) {
super(55, 130, "male", 160);
this.sage = age;
this.sweight = weight;
this.sgender = gender;
this.sheight = height;
}

public static void main(String[] args) {
Father f = new Father(50, 130, "male", 160);
FatherAndSon s = new FatherAndSon(25, 130, "male", 170);
//System.out.println(f.fage); 为什么父类对象f在这里不能访问自己的private属性
}

}

既然子类不能继承父类的private属性,那么也就无法直接访问父类的private属性。但是为什么在子类中,父类对象也不能访问自己的private属性呢?
...全文
503 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 michaellufhl 的回复:]

其实这是个很好的问题,楼主问的是java这样设计的原因,而不是需要解释private怎么用。

一个良好的设计和一个差的设计的明显区别就是信息隐藏(encapsulation)。它使得对外的API和它的实现分离开来。这样的话实现部分的改动不会影响API,而且API的客户代码和API的实现代码同时开发。对于Father类来说,它的成员fage目前是int, 但是以后可能根据需求实现改为Stri……
[/Quote]
非常好,可惜没有给你加分,下次有机会补上
michaellufhl 2010-09-14
  • 打赏
  • 举报
回复
其实这是个很好的问题,楼主问的是java这样设计的原因,而不是需要解释private怎么用。

一个良好的设计和一个差的设计的明显区别就是信息隐藏(encapsulation)。它使得对外的API和它的实现分离开来。这样的话实现部分的改动不会影响API,而且API的客户代码和API的实现代码同时开发。对于Father类来说,它的成员fage目前是int, 但是以后可能根据需求实现改为String,或者要规定>100的值不能赋值给fage。在这种情况下如果fage是public的,那么FatherAndSon不得不修改,所有用到fage的子类以及客户代码都要改动。如果是FatherAndSon和客户代码只是看到get/set函数的话,Father类就可以在get/set函数里面做转化,FatherAndSon不需要改动。这就是解耦合了。

所以变量private是很好的做法,可以带来很多好处,这也是OO的一个设计原则。还可以避免麻烦,譬如修改public变量导致您的客户代码的程序员的追杀:)
JavaBoyCaoJi 2010-09-14
  • 打赏
  • 举报
回复
对于私有变量,不能够通过实例.属性这种方式获得,只能内部构造一个get方法来获取此属性的值。
  • 打赏
  • 举报
回复
private只能被自己使用,对外界是不透明的
茫茫大海 2010-09-14
  • 打赏
  • 举报
回复
面向对象的特性(封装性),举个不太确切的例子,别人找你借钱,你通常会自己去取,然后拿给他,一般不会直接把卡给他吧!这个有点像封装!
菖蒲老先生 2010-09-14
  • 打赏
  • 举报
回复
为什么一定要这么纠结呢。。。
f.fage ——> f.getFage()不就行了么。
xiaoyaokelly 2010-09-14
  • 打赏
  • 举报
回复
既然子类不可访问,那么在子类中,通过父类对象去访问,不是一个意思么?本来,父类属性是要通过父类的方法去访问的,直接的访问,就是犯忌!
xuxianyue 2010-09-14
  • 打赏
  • 举报
回复
是的!!
liuyuhua0066 2010-09-14
  • 打赏
  • 举报
回复
依旧是月经贴!
thegodofwar 2010-09-14
  • 打赏
  • 举报
回复
考,这个问题问了不下100^n次了...
salever 2010-09-14
  • 打赏
  • 举报
回复
private 指的就是Class内部可见,即使是子类也不可见的。

protected相对比较宽了,当前Class和子类都可见

public 都可见

这个只是简单的访问权限问题,并非什么继承的月经问题
javagongcheng 2010-09-14
  • 打赏
  • 举报
回复
给你找了些 javaBean的规范

(1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public
(2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器,此构造器也应该通过调用各个特性的设置方法来设置特性的缺省值。
(3)一个javaBean类不应有公共实例变量,类变量都为private
(4)持有值应该通过一组存取方法(getXxx 和 setXxx)来访问:对于每个特性,应该有一个带匹配公用 getter 和 setter 方法的专用实例变量。
javagongcheng 2010-09-14
  • 打赏
  • 举报
回复
好象JavaBean里声明属性的时候不能用public
xuxianyue 2010-09-14
  • 打赏
  • 举报
回复
晕,这贴又来了。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧