1. 好程序員-千鋒教育旗下高端IT職業教育品牌

      400-811-9990
      我的賬戶
      好程序員

      專注高端IT職業培訓

      親愛的猿猿,歡迎!

      已有賬號,請

      如尚未注冊?

      [BigData] 好程序員大數據培訓分享大數據實用教程系列之繼承

      [復制鏈接]
      203 0
      admin 發表于 2019-12-11 14:28:22 | 只看該作者 |閱讀模式 打印 上一主題 下一主題
      好程序員大數據培訓分享實用教程之繼承,首先講一下繼承的基本概念
      > 如果有多個類中有相同的特征和行為(屬性和方法),并且這多個類之間從邏輯上講是有一定的關聯的。那么此時,我們可以將這些共同的部分單獨寫到一個類中。
      >
      > > Monkey: name, age, gender,  walk(), sleep(), eat()
      > >
      > > Tiger: name, age, gender,  walk(), sleep(), eat()
      > >
      > > Elephent:  name, age, gender,  walk(), sleep(), eat()
      >
      > > 可以將上述三種類中,共同的部分提取出來
      > >
      > > Animalname, age, gender,  walk(), sleep(), eat()
      >
      > 此時,被提取出的這個類,稱作是--**父類**,基類,超類
      >
      > 具有相同特征的那些類,稱作是--**子類**,派生類
      >
      > > A類派生出B類:AB的父類,BA的子類
      >
      > 他們之間的關系,是 **繼承**:子類繼承自父類
      關鍵字:**extends**
      > 用來描述兩個類之間的繼承關系
      >
      > ```java
      > class Monkey extends Animal {}
      > // Monkey繼承自Animal
      > // MonekyAnimal的子類,AnimalMonkey的父類
      > ```
      #### 繼承中的特點
      1. Java語言是單繼承的,一個類只能有一個父類,一個類可以有多個子類
         > 在某些語言中是支持多繼承的。例如:C++python...
         >
         > 但是在多繼承中,會有一個問題:二義性。
         >
         > 雖然很多語言都拋棄了多繼承,但是還是會用其他的方式來間接的實現類似多繼承。
         >
         > 例如:在java中是用接口實現的。
         >
         >  
         >
         > Java中所有的類都直接或者簡介的繼承自 **Object**
      2. 子類可以訪問到父類中能看的見的成員
         > 能看得見的:訪問權限
      3. 構造方法不能繼承。
      為什么要用繼承?
      1. 為了降低代碼冗余度
      2. 為了給一個類拓展功能。
         > 如果某一個類給我們提供的功能不能滿足我們的需求了,而且此時我們還不能修改這個類。那么我們要第一時間想到繼承。
      #### 繼承中的構造方法
      > 一個對象在實例化的時候,需要先去實例化從父類繼承到的成員
      >
      > 在實例化父類部分的時候,默認使用父類中的無參構造
      >
      >  
      >
      > 問題:如果父類中沒有無參構造,或者父類中的無參構造子類無法訪問(使用private修飾無參構造),則此時子類對象無法完成實例化。
      >
      > 解決:
      >
      > 1. 給父類中添加一個子類能夠訪問到的無參構造方法
      >
      > 2. 在子類的構造方法中,手動調用父類中能夠訪問到的構造方法,來實例化父類部分
      #### 方法的重寫
      > 繼承中最重要的一個知識點
      > 重寫,又叫做覆寫,值得是對同樣的一個方法,用子類的實現覆蓋掉父類的實現。
      > @Override:
      >
      > ?         是一個注解,常用在方法的重寫中。表示在進行方法重寫之前,進行一個驗證。驗證這個方法,到底是不是在重寫父類中的方法。這個注解,可以添加,也可以不添加。但是,一般情況下,我們都是要加上去的
      > 在重寫的時候需要注意的問題:
      >
      > 1. 訪問權限問題:
      >
      >    ?        子類方法的訪問權限不能比父類方法中的訪問權限低,要大于等于父類方法的訪問權限
      >
      >    ?        public > protected > default > private
      >
      > 2. 關于返回值類型:在重寫的時候,要求方法名和參數必須和父類中方法相同
      >
      >    ?        子類方法的返回值類型可以和父類方法中返回值類型相同。也可以是父類方法中返回值類型的子類型。
      >
      > 3. 關于異常的拋出。
      ####final關鍵字
      | 修飾 | 意義                                   |
      | ---- | -------------------------------------- |
      | 變量 | 這個變量的值不能改變,就是常量         |
      | 類   | 表示是一個最終類,這個類無法被繼承     |
      | 方法 | 表示是一個最終方法,這個方法無法被重寫 |
      #### super關鍵字的使用
      super表示對父類的引用。
      - 用在構造方法中,可以使用super()調用父類的構造方法
      - 在普通的方法中可以調用父類的方法
      #### 訪問權限修飾符
      > 用來描述一個類、方法、屬性、接口、枚舉...能夠被訪問到的一個范圍
      >
      > 訪問權限一共有四種:
      >
      > 公開(public
      >
      > 保護(protected
      >
      > 包(default / package
      >
      > 私有(private
      >
      > public > protected > default > private
      >
      > 對應的訪問權限修飾符一共有三個:
      >
      > publicprotectedprivate
      >
      > > 注:包權限沒有訪問權限修飾符,如果一個方法、屬性、類...沒有使用任意的訪問權限修飾符來修飾,那么他的訪問權限就是包權限
      | 訪問權限  | 可以修飾什么 | 可以訪問的范圍                                 |
      | --------- | ------------ | ---------------------------------------------- |
      | private   | 類成員       | 只能在當前的類中訪問                           |
      | default   | 類成員、類   | 只能在當前的包中進行訪問                       |
      | protected | 類成員       | 可以在當前的包中訪問,也可以在跨包的子類中訪問 |
      | public    | 類成員、類   | 可以在項目中任意的位置進行訪問                 |
      #### Object
      > Object這個類是所有類的父類,在Java中,所有的類都直接或者間接的繼承自Object
      >
      > Object類中,定義了一些我們比較常用的方法。
      ```java
      /**
      * 返回一個對象的字符串表示形式。
      * 這個方法,在一個對象需要轉型成字符串類型的時候,自動調用
      * 例如:在控制臺輸出、和字符串做拼接
      */
      public String toString() {
          return "";
      }
      /**
      * 獲取一個對象的類型(Class對象)
      */
      public Class<?> getClass();
      /**
      * 用來比較兩個對象是否相同的,在Object類中,默認還是比較兩個對象的地址
      * 可以重寫equals,實現自己的比較的規則
      * 1、如果othernull,返回結果一定是false
      * 2、如果this == other,返回結果一定是true
      * 3、如果thisother的類型不同,返回結果一定是false
      * 4、如果x.equals(y) == true,那么 y.equals(x) 一定也得是true
      * 5、如果x.equals(y) == true, y.equals(z) == true, 那么 x.equals(z) 一定也得是true
      *
      * 如果兩個對象用來比較是否相同,盡量使用equals來比較。
      * 如果兩個基本數據類型是否相同,不要使用equals,直接使用==即可
      */
      public boolean equals(Object other) {
          return (this == other);
      }
      /**
      * 獲取一個對象的哈希碼、散列碼。
      * 如果在一個對象沒有在一個散列序列中的話,沒有任何作用。
      * 但是,如果一個對象是存儲在一個散列序列中,這個方法有大作用。
      * 散列序列: HashSetHashMap...
      */
      public int hashCode() ;
      /**
      * 析構方法
      * 在實例化一個對象的時候,會執行構造方法。當這個對象被銷毀之前,會執行這個析構方法。
      */
      protected void finalize() throws Throwable { }
      好程序員大數據培訓官網:http://www.xdl36.com/bigdata.shtml

      精彩內容,一鍵分享給更多人!
      收藏
      收藏0
      轉播
      轉播
      分享
      淘帖0
      支持
      支持0
      反對
      反對0
      回復

      使用道具 舉報

      您需要登錄后才可以回帖

      本版積分規則

      關注我們
      好程序員
      千鋒好程序員

      北京校區(總部):北京市海淀區寶盛北里西區28號中關村智誠科創大廈

      深圳西部硅谷校區:深圳市寶安區寶安大道5010號深圳西部硅谷B座A區605-619

      杭州龍馳智慧谷校區:浙江省杭州市下沙經濟技術開發區元成路199號龍馳智慧谷B座7層

      鄭州校區:鄭州市二七區航海中路60號海為科技園C區10層、12層

      Copyright 2007-2019 北京千鋒互聯科技有限公司 .All Right

      京ICP備12003911號-5 京公安網11010802011455號

      請您保持通訊暢通1對1咨詢馬上開啟

      人人艹人人