关于父类私有属性在子类构造函数中super调用的解释
package test; public class Car { private int carMoney; //汽车租金 private String carName; //汽车名字 private int carNumb; //汽车序列号 private int carryNum; //载货量 private int passengerNum;//载客人数 public Car(int carNumb,String carName,int carMoney,int passengerNum,int carryNum){ this.carMoney = carMoney; this.carName = carName; this.carNumb = carNumb; this.carryNum = carryNum; this.passengerNum = passengerNum; } public int getCarMoney() { return carMoney; } public void setCarMoney(int carMoney) { this.carMoney = carMoney; } public String getCarName() { return carName; } public void setCarName(String carName) { this.carName = carName; } public int getCarNumb() { return carNumb; } public void setCarNumb(int carNumb) { this.carNumb = carNumb; } public int getCarryNum() { return carryNum; } public void setCarryNum(int carryNum) { this.carryNum = carryNum; } public int getPassengerNum() { return passengerNum; } public void setPassengerNum(int passengerNum) { this.passengerNum = passengerNum; } public void showInfo() { // TODO Auto-generated method stub } public static void main(String[] args){ Car as=new Car(0,"sende",200000,23,32); System.out.println(as.carMoney); /** * * 子类可以继承父类的变量 * ①子类和父类在同一个包中时,子类可以继承父类的除private属性的所有方法和成员变量,当子类与父类不在同一个包中时,子类只能继承父类的protected和public属性的成员变量和方法。 * ②子类中定义的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量;子类中定义一个方法,并且这个方法的名字、返回类型、参数个数和类型与从父类继承的方法完全相同,子类就隐藏从父类继承来的方法(方法的重写)。 * ③在子类中允许有一个方法和父类的方法名字相同而类型不同。 * * 在这个测试类中可以看到,可以直接使用类对象获取父类中的属性,即使该属性是私有属性,而使用其子类的对象获取对应属性,却无法使用对象名.属性, * 只能通过公有的get方法获取属性,可以看出在子类的构造方法中的该 变量不是子类的,而是父类的,super关键字的作用是调用父类的构造方法,且必须 * 放在构造器的首行 * this和super分为调用和引用。只可以引用父类构造器,不可以调用。引用只可以出现在构造器的第一行。 * super引用的是父类的构造方法而不是父类的属性,如果将父类的构造方法变为私有你就可以发现子类的使用super的构造出错了。因为super调用的使父类 * 的构造方法,所以在走父类构造器中的this代表的是父类,赋值给的属性也是父类的,这里子类中继承的感觉是父类属性的一个映射,因为它受到父类中的修饰 * 词的影响,不完全属于子类 * 不知道正确不正确,我的看法,欢迎指出问题,谢谢 */ Sedan sd=new Sedan(0,"sende",200000,23,32); System.out.println(sd.getCarNumb()); } } class Sedan extends Car{ public Sedan(int carNumb,String carName,int carMoney,int passengerNum,int carryNum){ super(carNumb,carName,carMoney,passengerNum,carryNum); } } class Pickup extends Car{ public Pickup(int carNumb,String carName,int carMoney,int passengerNum,int carryNum){ super(carNumb,carName,carMoney,passengerNum,carryNum); } }