2、類與對象及各種關鍵字

  • 類是對象的抽象。
  • 注意事項:一個類裏面儘量只寫一個class,而且只有主類可以加權限修飾符。
  • 一個類可以作爲另一個類的成員,用戶有角色,學生有電腦。

訪問權限修飾符

在這裏插入圖片描述

方法重載與方法重寫

  • 方法重載(overload)(並列關係)
    • 方法名相同
    • 形參數據順序不同或者數據類型不同
    • 與修飾符和返回值類型無關
  • 方法重寫(override)(覆蓋關係)
    • 前提:有層級關係(繼承)
    • 場景:出現在子類裏面,子類重寫父類的方法
    • 體現:
      • 方法名,形參必須相同
      • 返回值類型<= 父類返回值類型(多態)
      • 訪問權限修飾符>=父類訪問權限修飾符

this關鍵字

  • this本質爲對象(可以用到輸出語句),當前正在運行對象。
    • 當成員變量與局部變量重名的時候 我們可以使用this進行區分
    • this訪問類的成員
    • this可以充當實際參數
    • this調用構造方法(再構造方法) this(參數); 代碼的第一行
    • this不能在static所修飾的方法運用

super關鍵字

  • super本質爲父類對象的一個標識(不可以用到輸出語句)。

static關鍵字

  • 修飾符:靜態的。
  • 使用場景:常量定義或者工具類。
  • jvm加載class文件,只加載一次,static成員也只加載一次。由static修飾的成員及方法稱爲 類成員 或者 類方法。
  • static修飾成員:
    • 如果類中成員變量被定義爲靜態,那麼不論有多少個對象,靜態成員變量只有一份內存拷貝,即所有對象共享該成員變量;
    • 靜態成員變量的作用域只在類內部,但其生命週期卻貫穿整個程序;
    • 假如變量數據要讓所有對象共享,那就必須聲明成靜態變量。
  • static修飾方法:
    • 靜態方法只能訪問靜態成員及方法;
    • 靜態成員方法沒有this引用。
  • 靜態代碼塊
    • 與構造方法的功能相似,主要對成員變量做初始化數據的操作;
    • 但是有且只走一次;
    • 執行級別比構造方法還要高。

get/set方法爲什麼不能修飾類的static成員?

  • static成員的set()方法也成爲了靜態方法。靜態方法是屬於類(class)的,普通方法纔是屬於實體對象(也就是New出來的對象)的,所以不合理。

封裝、繼承、多態

  • 封裝
    • 解決了數據的安全性問題
    • private、get/set、lombok集成、this關鍵字、static關鍵字
  • 繼承
    • 解決了代碼的重用問題
    • extends、super關鍵字、方法重寫
  • 多態
    • 解決了程序的擴展問題
    • 向上轉型、向下轉型、abstract
    • 發生多態:
      • ①子類對象賦值給父類實例/父類對象指向任意子類實例;
      • ②子類對象向上轉型;
      • ③編譯時數據類型(父類)與運行時數據類型不一致(子類)。
    • 多態運行時:
      • 調用屬性,看編譯時數據類型(父類),因爲jvm不加載子類;
      • 調用方法,看運行時數據類型(子類)是否重寫父類方法;子類獨有的方法不可調用。

接口和抽象類的異同

  • 設計層面來講,抽象類作爲很多子類的父類,它是一種模板式設計。而接口是一種行爲規範,它是一種輻射式設計。

在這裏插入圖片描述
深入理解接口和抽象類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章