各位大侠你们好!
小弟已修过c语言和数据结构,刚刚通过java来上手"面向对象"的编程,发现java的"继承"上设计得有问题:    -->  在java中,如果 父类的 实例变量 通过private 封装起来了,那么其"子类"就无法直接访问父类的private
成员,这样"继承"的功能在应用上,个人认为缺乏实际的意义啊,因为无法重复利用父类成员的话,"继承"有何实际意义?    ps: 这样的困惑是基于在很多java编程教材中提到的: "在class中,如果没有充分理由,请尽量把实例变量设为
private,而非 public,那么若都设为 private,如何让写好的class能够在往后的使用中得到"继承"呢?
        难道为了可以方便被"继承",就通通设为public? 或者使用setter函数来调用?但使用setter的话,和在一般的类中来访问的话,没有什么区别啊,此时感觉不到"继承"所能带来的好处.....
 
    不知有没有更合适的方式来理解java中"继承"的实用价值,在此向各位大侠求教~~~小弟在此不胜感激!!^___^附上一段example:                  
public class test1    //父类的名字为 "test1"     
{
private String name;  [color=#00FFFF]//在test1类中,name和price 这2个变量都采用private封装起来了[/color]
private double price;
test1(String name_input,double price_input)  [color=#00FFFF]// test1类的构造函数[/color]
    {
     name=name_input;
     price=price_input;
    }

}//以下是子类的代码:
public class test2 extends test1 {  //test2 继承test1 test2(String name_input, double price_input) {  //test2的构造函数继承于 test1
super(name_input, price_input);
// TODO Auto-generated constructor stub
}

public void run()  //  使用run函数开始运行代码
{
test2 a =new  test2("name1",1);  // 申请一个test2对象,并且赋上初值
     
                 a.name="name2"; //问题出现了!此时ide提示 "无法直接访问test1这个class中的name变量!
                                    因为被  privata封装了!"


}

}

解决方案 »

  1.   

    想要子类可用、其它类不可用,声明为protected即可。嗯,好好咀嚼下public、protected、private的作用域的作用,你想要的效果都是能实现的。
      

  2.   

    谢谢沙发!问题解决了!
    ^_____^ps: 因为看的是一本老外的教材,他居然把 protected 放到书的最后一章才提到......,看来学it也不能光迷信洋货啊~~~
      

  3.   

    通过setter,和getter访问和直接访问肯定是有区别的啊
    假如我是类的提供者,你是使用者,我可以在setter,和getter方法中加一些判定条件才能让你访问我的private数据,这样对数据显然起到了保护作用