<button id="an55y"><acronym id="an55y"><input id="an55y"></input></acronym></button>
    1. 當前位置: 首頁 / 技術分享 / 正文
      好程序員大數據培訓分享實用教程之繼承

      2020-03-10

      好程序員大數據培訓分享實用教程之繼承,首先講一下繼承的基本概念

      好程序員

      > 如果有多個類中有相同的特征和行為(屬性和方法),并且這多個類之間從邏輯上講是有一定的關聯的。那么此時,我們可以將這些共同的部分單獨寫到一個類中。
      >
      > > Monkey: name, age, gender, walk(), sleep(), eat()
      > >
      > > Tiger: name, age, gender, walk(), sleep(), eat()
      > >
      > > Elephent: name, age, gender, walk(), sleep(), eat()
      >
      > > 可以將上述三種類中,共同的部分提取出來
      > >
      > > Animal: name, age, gender, walk(), sleep(), eat()
      >
      > 此時,被提取出的這個類,稱作是--**父類**,基類,超類
      >
      > 具有相同特征的那些類,稱作是--**子類**,派生類
      >
      > > 從A類派生出B類:A是B的父類,B是A的子類
      >
      > 他們之間的關系,是 **繼承**:子類繼承自父類
      關鍵字:**extends**
      > 用來描述兩個類之間的繼承關系
      >
      > ```java
      > class Monkey extends Animal {}
      > // Monkey繼承自Animal
      > // Moneky是Animal的子類,Animal是Monkey的父類
      > ```
      #### 繼承中的特點
      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
      >
      > 對應的訪問權限修飾符一共有三個:
      >
      > public、protected、private
      >
      > > 注:包權限沒有訪問權限修飾符,如果一個方法、屬性、類...沒有使用任意的訪問權限修飾符來修飾,那么他的訪問權限就是包權限
      | 訪問權限 | 可以修飾什么 | 可以訪問的范圍 |
      | --------- | ------------ | ---------------------------------------------- |
      | private | 類成員 | 只能在當前的類中訪問 |
      | default | 類成員、類 | 只能在當前的包中進行訪問 |
      | protected | 類成員 | 可以在當前的包中訪問,也可以在跨包的子類中訪問 |
      | public | 類成員、類 | 可以在項目中任意的位置進行訪問 |
      #### Object類
      > Object這個類是所有類的父類,在Java中,所有的類都直接或者間接的繼承自Object類
      >
      > 在Object類中,定義了一些我們比較常用的方法。
      ```java
      /**
      * 返回一個對象的字符串表示形式。
      * 這個方法,在一個對象需要轉型成字符串類型的時候,自動調用
      * 例如:在控制臺輸出、和字符串做拼接
      */
      public String toString() {
      return "";
      }
      /**
      * 獲取一個對象的類型(Class對象)
      */
      public Class<?> getClass();
      /**
      * 用來比較兩個對象是否相同的,在Object類中,默認還是比較兩個對象的地址
      * 可以重寫equals,實現自己的比較的規則
      * 1、如果other是null,返回結果一定是false
      * 2、如果this == other,返回結果一定是true
      * 3、如果this和other的類型不同,返回結果一定是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);
      }
      /**
      * 獲取一個對象的哈希碼、散列碼。
      * 如果在一個對象沒有在一個散列序列中的話,沒有任何作用。
      * 但是,如果一個對象是存儲在一個散列序列中,這個方法有大作用。
      * 散列序列: HashSet、HashMap...
      */
      public int hashCode() ;
      /**
      * 析構方法
      * 在實例化一個對象的時候,會執行構造方法。當這個對象被銷毀之前,會執行這個析構方法。
      */
      protected void finalize() throws Throwable { }
      好程序員大數據培訓官網:http://bigdata.goodprogrammer.org/

      好程序員開班動態

      More+
      • HTML5大前端 <高端班>

        開班時間:2020-02-17(北京)

        開班盛況

        開班時間:2020-03-02(深圳)

        開班盛況
      • 大數據+人工智能 <好程序員嚴選班>

        開班時間:2019-12-23(北京)

        開班盛況
      • 大數據+人工智能 <好程序員班>

        開班時間:2020-02-24(杭州)

        開班盛況

        開班時間:2020-02-17(北京)

        開班盛況
      • JavaEE分布式開發 <高端班>

        開班時間:2020-03-09(北京)

        開班盛況
      • Python全棧+人工智能 <高端班>

        開班時間:2019-07-22(北京)

        開班盛況
      • 云計算開發 <高端班>

        開班時間:2020-02-24(北京)

        開班盛況
      在線咨詢
      免費試聽
      入學教程
      立即報名

      Copyright 2011-2020 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公安網11010802011455號

      色日日 - 色日日网集百万部多多潮流电影,酷酷小说,精彩图片,火辣