关于父类私有属性在子类构造函数中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);
        }
    }

 

posted @ 2016-05-20 10:37  guodaxia  阅读(6053)  评论(0编辑  收藏  举报