1. 程式人生 > >面向對象(繼承,多態)

面向對象(繼承,多態)

牢固

  • 二維數組的定義格式:
    第一種:直接給定了每一個一維數組中數組長度
    數據類型[][] 數組名稱 = new 數據類型[m][n]
    第二種:給定了多少個一維數組,長度動態給定
    數據類型[][] 數組名稱 = new 數據類型[m][] ;
    第三種:二維數組中直接給定元素值
    數據類型[][] 數組名稱 = {{元素1,元素2},{元素1,元素2}…}

            如何遍歷二維數組
                    int [][] arr = {{11,22},{33,44},{55,66}} ;
                    外層循環:控制的是二維數組長度,內存循環,一維數組長度
  • 代碼塊
    在Java中,{}括起來,統稱為代碼塊

    局部代碼塊,構造代碼塊,靜態代碼塊(隨著類的加載而加載,只執行一次)
    構造代碼塊:在每次執行構造方法之前,優先執行構造代碼塊
    優先級:靜態代碼塊>構造代碼塊>構造方法

        MYSQL數據庫..  JDBC(Java連接數據庫) 
  • 繼承
    class Zi extends Fu{…}
    A. 繼承的好處:
    1)提高代碼的復用性
    2)提高代碼的維護性
    3)它是多態的前提
    B. 繼承的特點:
    繼承不能多繼承,只能單繼承,但是可以多層繼承..
    C.註意事項:
    1)子類繼承父類,可以繼承父類所有的東西(除過構造方法),私有的(private),不能直接 訪問,所有需要提供公共的方法…

    2)不能繼承構造方法,但是可以通過super()關鍵字去訪問…
    3)子類繼承父類,子類的構造方法(有參/無參)都會默認的訪問父類的無參構造方法, 優先讓父類的數據進行初始化.
    D. 假如:父類沒有無參構造方法?會怎麽樣?如何解決?
    會出現編譯錯誤;
    解決方法如下:
    1)可以提供無參構造
    2)通過super(父類的帶參構造)..
    3)通過this(),通過本類的無參構造,再通過無參構造間接的去訪問父類的代碼帶參構 造..

    E.成員變量,
    1) 如果子類繼承父類,子類中的成員變量和父類中的成員變量名稱不一致,分別輸出
    2)名稱一致的情況:先在子類的局部位置找,找到,就輸出

    3)名稱一致,還沒有找到,到子類的成員位置找,有就輸出,否則,到父類的成員位置 找,有就輸出, 沒有,就報錯…
    F.成員方法
    子類繼承父類,子類的成員方法名和父類的名一致,
    先子類中找,有就調用,沒有就會到父類中調用
    方法重寫:override
    方法重載:overload
    子類聲明了一個和父類一模一樣的方法聲明,其目的是為覆蓋父類的方法,完成自己 的功能…

  • 4.多態:
    同一時刻,體現出來的不同狀態
    A.多態的前提:
    1)必須有繼承關系
    2)必須有方法重寫
    3)父類的引用指向子類對象(向上轉型)

    B.多態的成員訪問特點:
            構造方法:都是對對象進行初始化的
            成員變量:編譯看左,運行看左
            成員方法(非靜態):編譯看左,運行看右(存在方法重寫)
            靜態的成員方法:不能算方法重寫,和類有關系: 編譯看左,運行看左
    C.多態的好處:
         提高代碼復用性(由繼承保證)
         提高代碼的擴展性(由多態保證)
    D.多態的弊端:不能子類特有功能;
           解決方法:
           向下轉型:將父類的引用強制轉換為子類的引用
                Fu  f = new Zi() ;
           //向下轉型
                Zi z= (Zi)f ;
    E. 向下轉型容易出現的問題:
              使用不當-ClassCastException:類轉換異常
                    解決方案:自己分析,內存的指向問題…          

    5.抽象類
    A.抽象類:(抽象類有抽象類多態的形式。。)
    將類中的功能抽象化,類變成抽象類
    關鍵字:abstract
    抽象類的特點:不能實例化 -不能創建對象
    抽象了的子類是具體類才是研究課題:由於具體類所有抽象類通過他子類進行實例化
    B.抽象類的成員特點:
    成員變量:可以是常量,也可以是變量
    構造方法:有參/無參
    成員方法:可以是抽象的,也可以是非抽象的
    (有抽象方法的類一定是抽象類,抽象類中不一定有抽象方法)

    6.接口
    A. 接口:
    給一些類提供一些額外的功能(擴展功能),定義接口
    關鍵字:interface
    class 子實現類(後面加impl,做到見名知意) implements(實現) 接口{.......}
    B.接口中的成員特點:
    成員變量:此變量是一個常量:public static final :默認的修飾符
    構造方法:接口沒有構造方法
    成員方法:都是抽象方法

    C.抽象類和接口的區別?從三個方向去答
      1) 成員的區別
              成員變量:
                   抽象類:既可以常量,也可以是變量
                     接口:只能是常量,默認的修飾符:public static final
              構造方法:
                     抽象類:有構造方法,無參/有參 (給對象進行初始化的)
                     接口:沒有構造方法
              成員方法:
                     抽象類:可以有抽象方法,也可以有非抽象方法
                     接口:只能是抽象方法 :默認的修飾符:public abstract
    
        2)類與類/類與接口關系的區別
                 類與類之間的關系:
                 繼承關系,只支持單繼承,不支持多繼承,但是可以多層繼承
            類與接口的關系:
                       實現關系,一個類繼承另一個類的同時,還可以實現多個接口...
            接口與接口的關系:
                       是一種繼承關系,既可以單繼承,也可以多繼承...
                       接口1 extends 接口2,接口3...
    
        3)設計原則的 區別
           (1)抽象類: 是有繼承關系---->體現的是一種"is a"的關系   (A是B的一種或者B是A的                           一種)
           (2)接口:類和接口:實現關系--->體現的是一種" like a"的關系(擴展功能)  :跳高貓 像                       貓  
    1. 形式參數和返回值問題
      A.形式參數是引用類型的情況:
      具體類: 需要傳遞的是該類 對象
      抽象類:需要傳遞是該抽象類的子類對象
      接口:需要傳遞是該接口的子實現類 (還可以匿名內部類的方式)
      B.返回值的問題:
      具體類:返回該該具體類的對象
      抽象類:返回的是該抽象類的子類對象(間接的:抽象類多態…)
      接口:返回的是該接口的子實現類對象(間接:接口多態)

    2. 內部類:
      A.成員內部類和局部內部類的寫法
      B.外部類訪問成員內部類,局部內部類中的 成員使用的方式….
      1) 成員內部類是非靜態的,外部類訪問內部類的成員
      外部類名.內部類名 對象名 = 外部類對象.內部對象;
      2) 如果成員內部類是靜態的,外部類訪問內部類的成員
      外部類名.內部類名 對象名 = new 外部類名.內部類名() ;
      內部類訪問外部類的成員變量可直接訪問,靜態的內部類訪問外部類的數據,該數據 必須static修飾,和當前靜態內部類的成員方法是否為靜態還是非靜態“ 沒有關系”

      C.匿名內部類:
      前提:接口或者抽象類(可以抽象類也可以普通類)
      new 接口名/類名(){
      重寫功能(){…}
      }
      本質:繼承了該類或者是實現了該接口的子類對象..

    3. final關鍵字特點:
      final是一個修飾符,可以修飾類,方法和變量‘
      被final修飾的類是一個最終類不可以被繼承;
      被final修飾的方法是一個最終的方法.不可以被覆蓋;
      被final修飾的變量是一個常量,只能被賦值一次;

    10.面試題
    A. 方法重寫和方法重載的區別?
    方法重載:Overload
    方法名相同,返回值類型相同,但是參數不同(參數類型不同,或者參數個數不同)
    方法重寫:Override
    方法重寫是相對於繼承而言
    重寫的方法名,返回類型,參數類型,參數個數都要求和父類中一樣.

    B.final關鍵字的面試題?(final,finally,finalize有什麽區別)
           final用於聲明屬性,方法和類,分別表示屬性不可改變,方法不可覆蓋,類不能繼承
       finally是異常處理語句結構的一部分,表示總是執行
       finalize是object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,           供垃圾收集時的其他資源回收,例如關閉文件等;

    面向對象(繼承,多態)