日期:2014-05-20  浏览次数:20815 次

面向对象入门求助~~~感觉java的"继承"功能设计得很混乱?
       各位大侠你们好!
小弟已修过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封装了!"


}



}