1. 程式人生 > 實用技巧 >(內部類,許可權修飾符,多型,抽象類)2020.10.22

(內部類,許可權修飾符,多型,抽象類)2020.10.22

目錄

內部類

定義:將一個類定義到另一個類的裡邊,裡邊的類就稱為叫做內部類,內建類。
   將內部類定義在它所屬的類中,類中分為成員位置和區域性位置,因此
   按照位置劃分: 成員內部類區域性內部類
   按照內部類是否有類名劃分:有名內部類匿名內部類

成員內部類

結構:
   class 外部類名 {
      class 內部類名 {
      }
   }
   將類定義在成員位置上,因此該類可以使用成員修飾符進行修飾。

預設內部類:

類中可以定義的成員有:
          非靜態成員、靜態常量
類中可以直接訪問它所屬的外部類中的成員:
          私有、靜態的、非私有非靜態
在這裡插入圖片描述
在這裡插入圖片描述

私有內部類:

使用方式與預設內部類時相同的,只不過在內部類前使用private關鍵字修飾了,因此
該內部類只能在它所屬的外部類中使用,即提供一個方法,在方法中建立內部類物件。
在這裡插入圖片描述

靜態內部類:

就是內部類前使用關鍵字static修飾了。
在該內部類中:既可以定義靜態成員也可以定義非靜態成員。
在這裡插入圖片描述
在這裡插入圖片描述

區域性內部類:

結構:
   class 外部類名 {
     public void 方法名(){
       class 內部類名 {

       }
     }
    }
將內部類定義在區域性位置上,即方法中
在這裡插入圖片描述
總結:
創不建立物件,取決於類中的成員是否是靜態。

概念:
 1.用來分類管理類檔案(包可以形象化為電腦中的資料夾)
 2.class檔案與Java原始檔相分離
 3.在不同包中出現同名的類
格式:
  package 包名;
  注意:這條語句在一個Java中檔案只能出現1次
     這條語句必須寫在有效程式碼行的最上邊
  包名:通常都是小寫單詞或小寫字母。
  規範: 公司域名倒置.專案名.模組名.[子模組]*;
     eg: com.ujiuye.cms.login;
  注意: 一旦定義了package語句,那麼類名的完整形式為:包名.類名

  帶包編譯: javac -d 目錄 原始檔名.java
  帶包執行: java 包名.類名
 當定義了package,類名的完整形式有點長,倒置建立物件時編寫也有點長,因此想要簡化程式碼,可以使用import關鍵字來簡化,是一個導包的語句。
 格式:
   import 包名.類名; 推薦 或 import 包名.*;
   位置: 在package 和 class 的中間,可以出現多次。
   建立物件時,可以省略”包名.”。
    注意:在不同包中使用時,同一包中不需要import
   總結:
     package : 告訴編譯器,當前類要儲存在哪
     import :告訴編譯器,當前類中使用的其他類去哪找

訪問許可權修飾符

指的是類中的成員能被訪問的許可權。
由小到大: private 預設 protected public

當前類同包下不同包子類(繼承)所有
private
預設
protected
public

以後定義成員時,選擇合適的修飾符來修飾,控制訪問的許可權。

多型

面向物件的特徵:封裝、繼承、多型
理解:一個物件具有多種形態。
 站在物件的角度來看,可以使用不同型別的引用變數來指向。
 站在引用變數的角度來看,該引用變數可以指向不同型別的物件。
前提:必須有繼承或實現。
表現:父型別引用指向(接收)它自己的子類物件。
多型形式訪問類中的成員方法時(虛擬呼叫):
 編譯時期:要檢查引用變數所屬的型別中,是否有要呼叫的方法,有編譯通過,否則失敗。
 執行時期:執行的是物件型別中的該方法。
 總結:編譯看父類,執行看子類。
好處:
 提高了程式碼的擴充套件性 ,代表案例方法引數

轉型問題:

向上轉型

(基本型別的自動轉換) 父型別引用變數指向子類物件。

向下轉型

(基本型別的強制轉換) 將父型別引用變數轉為子型別引用變數,
  格式:(子類型別)父型別引用變數
在這裡插入圖片描述
在這裡插入圖片描述
 以上兩行程式碼編譯是沒有問題的,但是執行會出現異常。
在這裡插入圖片描述
 型別轉換異常,不能將Animal1 轉為 Cat1型別。
 總結:做轉型時,一定是子類物件的引用變數的型別在改變,一會是父型別引用,一會是自己型別的引用,由始至終物件一直是子類物件。

instanceof

運算子,比較運算子,運算後的結果是boolean型別。
 比較左邊的引用變數所指向的物件是否是右邊的型別,即判斷兩邊型別是否一致。
 注意:如果判斷的型別有父子關係,一定是先判斷子型別最後是父型別
    如果是兄弟關係沒有順序了。
在這裡插入圖片描述

抽象類

也是類,只不過是一個特殊的類,這個類有點強制性的感覺。
由來:
當描述Cat類和Dog類時,發現有共性的方法宣告,即eat()方法,將共性內容進行向上抽取,抽取到父類Animal中,但是隻能抽取方法的宣告,因此這個方法是沒有方法體的方法,需使用關鍵字abstract,這樣的方法稱為叫做抽象方法,抽象方法要在抽象類中。

abstract

抽象的意思,是一個修飾符。可以修飾類和方法。
格式:
  abstract class 類名{}
特點:
 1.抽象方法要在抽象類中
 2.抽象類是不可以例項化的,即不能建立物件
 3.抽象類應該是一個父類,子類繼承抽象類,子類想要能建立物件,需將繼承的所有抽象方法都重寫,否則子類是抽象類。
 因此一個類的修飾符,不可能final和abstract都有
 4.抽象類中可以沒有抽象方法,目的就是不讓其例項化
成員:
  抽象方法、成員變數、構造方法、成員方法
  注意:抽象類中的成員可以是以上的四種內容,不是要求都同時存在的。