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属性呢?

解决方案 »

  1.   

    好象JavaBean里声明属性的时候不能用public
      

  2.   

    给你找了些 javaBean的规范 (1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public
    (2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器,此构造器也应该通过调用各个特性的设置方法来设置特性的缺省值。
    (3)一个javaBean类不应有公共实例变量,类变量都为private
    (4)持有值应该通过一组存取方法(getXxx 和 setXxx)来访问:对于每个特性,应该有一个带匹配公用 getter 和 setter 方法的专用实例变量。
      

  3.   

    private  指的就是Class内部可见,即使是子类也不可见的。protected相对比较宽了,当前Class和子类都可见public 都可见这个只是简单的访问权限问题,并非什么继承的月经问题
      

  4.   

    为什么一定要这么纠结呢
    f.fage ——> f.getFage()不就行了么。
      

  5.   

    private只能被自己使用,对外界是不透明的
      

  6.   

    对于私有变量,不能够通过实例.属性这种方式获得,只能内部构造一个get方法来获取此属性的值。
      

  7.   

    其实这是个很好的问题,楼主问的是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变量导致您的客户代码的程序员的追杀:)