代码如下,我的问题是wheels是父类的私有成员,为何在子类的构造方法中还能初始化wheels,难道子类的具体对象也可以拥有该成员?class Vehicle{
private int wheels;      //使用了private,为何在子类中还可以初始化wheels呢
private double weight;
Vehicle(int wheels,double weight){
this.wheels = wheels;
this.weight = weight;
}
public void show(){
System.out.println("车轮数为:"+wheels+"  车重为:"+weight);
}
}
class Truck extends Vehicle{
private double load;
Truck(int wheels,double weight,double load){
super(wheels,weight);
this.load = load;
}
public void show(){
super.show();
System.out.println("载重量为:"+load);
}
}public class Test2 {
public static void main(String[] args){
         Vehicle v1 = new Vehicle(4,200);
         v1.show();
         Truck t1 = new Truck(8,1000,2000);
         t1.show();
}
}

解决方案 »

  1.   

    Of course! Have you ever seen a Truck without wheels??
      

  2.   

    这是一个很复杂的问题,涉及Java类的实现,对象初始化过程。
    MARK一下。
      

  3.   

    Vehicle的私有成员交给公有构造函数来赋值,与设置 public setter方法一个道理哦
    不仅Vehicle的子类,其他不相关类也可以调用Vehicle的public constructor啊
      

  4.   

    super(wheels,weight);
    因为这是父类干的活,自然就把父类的wheels初始化了。wheels是私有类型字段的,Truck不能访问,或者说不能使用。但是不能访问不表示不存在,所以还是必须交给父类的构造函数初始化的。
      

  5.   

    调用是可以调用,那子类的具体对象中是否存在wheels这个成员变量呢?
      

  6.   

    应该是这样。不过没必要关注这种情况,java不允许手动操作内存,子类不能访问父类的私有成员,就等同于私有成员不存在。套用一句俗话:说你没有,你就没有,有也没有。