面向对象入门求助~~~感觉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封装了!"
}
}