1. 程式人生 > 實用技巧 >LocalDateTime、LocalDate、Date 轉為 String

LocalDateTime、LocalDate、Date 轉為 String

定義

子類繼承父類的屬性和行為,使得子類物件具有與父類相同的屬性、相同的行為。子類可以直接訪問父類中的非私有的屬性和行為。(共性抽取,提高了程式碼的複用性;使類與類之間產生了關係,是多型的前提)

Java只支援單繼承。

繼承後的幾種情況

  • 子類和父類沒有重名屬性和方法時

    class Fu {
        int a = 1;
        
        void showFu () {
            System.out.println("Fu");
        }
    }
    
    class Zi extends Fu{
        int b = 3;
        
        void showZi () {
            System.out.println("Zi");
        }
    }
    
    class Test {
        public static void main(String [] args) {
            Zi z = new Zi();
            // 子類繼承父類非私有的方法屬性
            System.out.println(z.a); // 1
            z.showFu(); // Fu
            System.out.println(z.b); // 3
            z.showZi(); // Zi
        }
    }
    
  • 子類和父類屬性重名時

    class Fu {
        int a = 1;
    }
    
    class Zi extends Fu{
        int a = 3;
        
        void show () {
            // 當父類和子類的屬性名相同時,可以通過 super 訪問父類的屬性,super 指向父類
            System.out.println(super.a);
            System.out.println(this.a);
        }
    }
    
    class Test {
        public static void main(String [] args) {
            Zi z = new Zi();
            z.show(); // 1  3
        }
    }
    
  • 子類和父類方法重名時,就發生了方法重寫

    方法重寫:子類中出現與父類出現方法簽名和返回值一樣的方法時(返回值型別,方法名和引數列表都相同),會出現覆蓋效果,也稱為重寫或者複寫。宣告不變,重新實現。

    方法簽名

    由方法名稱和方法的形參列表(形參型別和形參順序)共同組成 ;不包括返回型別和訪問修飾符

    class Fu {
        void show() {
            System.out.println("Fu");
        }
    }
    
    class Zi {
        // @Override 註解 檢查是否是方法重寫,不是將會報錯
        @Override
        void show() {
            // 也可通過 super 掉用父類的非私有方法
            System.out.println("Zi");
        }
    }
    
    class Test {
        public static void main(String [] args) {
            Zi z = new Zi();
            z.show(); // Zi
        }
    }
    

    注意

    1. 子類重寫父類方法時,必須要保證子類方法許可權大於等於父類方法許可權
    2. 子類方法和父類方法具有相同的方法名字、相同的引數列表、相同的返回型別
  • 子類和父類的構造方法

    1. 子類不會繼承父類的構造方法

    2. 構造方法的作用是初始化類,所以子類例項化時必須先例項化父類。子類的構造方法中預設有一個 super(),表示掉用父類的構造方法。

    class Fu {
        public Fu(){
    		System.out.println("Fu");
    	}
    }
    
    class Zi extends Fu{
        public Zi() {
    		// 預設掉用了 super() 父類構造方法
    		System.out.println("Zi");
    	}
    }
    
    class H {
        public static void main(String [] args) {
            Zi z = new Zi(); // Fu  Zi
        }
    }
    

super 和 this

  • super :代表當前物件的父類

  • this:代表當前物件(誰掉用就是誰)

    super.a; // 父類的成員變數
    this.a; // 本類的成員變數
        
    super.show(); // 父類的成員方法
    this.show(); // 本類的成員方法
    
    super(); // 父類的構造方法
    this(); // 本類的構造方法
    

    子類構造方法中預設掉用super(),手動掉用super()會覆蓋預設的super()super()this() 都必須是在構造方法的第一行,所以不能同時出現。