關於父類私有屬性在子類構造函數中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);
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM