11.物件導向(3)

dededea發表於2024-09-05

MODULE 11 物件導向

  1. 會定義介面
  2. 會在介面中定義抽象方法,預設方法,靜態方法,成員變數
  3. 會呼叫介面中的成員
  4. 會利用多型的方式new物件
  5. 知道多型的前提
  6. 要知道使用多型的好處
  7. 會在多型的前提下,向下轉型
  8. 會利用instanceof判斷型別

一.介面

(一)介面的介紹

1.介面:是一個引用資料型別,是一個標準,規則

2.關鍵字:

(1)interface介面

public interface 介面名{}

(2)implements 實現

實現類 implements 介面名{}

3.介面中可以定義的成員

(1)jdk7以及之前:

抽象方法:public abstract -> 即使不寫public abstract,預設也有

成員變數:public static final 資料型別 變數名 = 值 -> 即使不寫 public static final,預設也有

final是最終的,被final修飾的變數不能二次賦值,所以我們一般將 final修飾的變數視為常量

(2)jdk8:

預設方法:public default 返回值型別 方法名(形參){}

靜態方法:public static 返回值型別 方法名(形參){}

(3)jdk9開始:

` 私有方法:private的方法

(二)介面的定義以及使用

1.定義介面:

public interface 介面名{}

2.實現:

public class 實現類類名 implements 介面名{}

3.使用:

(1)實現類實現介面

(2)重寫介面中的抽象方法

(3)建立實現類物件(介面不能直接new物件)

(4)呼叫重寫的方法

11.物件導向(3)

11.物件導向(3)

11.物件導向(3)

(三)介面中的成員

1.抽象方法

(1)定義格式

public abstract 返回值型別 方法名(形參);

(2)注意

不寫public abstract 預設也有

(3)使用

A.定義實現類,實現介面

B.重寫抽象方法

C.建立實現類物件,呼叫重寫的方法

11.物件導向(3)

11.物件導向(3)

11.物件導向(3)

2.預設方法

(1)格式:

public default 返回值型別 方法名(形參){

方法體

return 結果

}

(2)使用

A.定義實現類,實現介面

B.預設方法可重寫,可不重寫

C.建立實現類物件,呼叫預設方法

11.物件導向(3)

11.物件導向(3)

11.物件導向(3)

3.靜態方法

(1)格式

public static 返回值型別 方法名(形參){

方法體

return 結果

}

(2)使用

介面名直接呼叫

11.物件導向(3)

11.物件導向(3)

預設方法和靜態方法 -> 可以作為臨時加的一個小功能

4.成員變數

(1)格式

public static final 資料型別 變數名 = 值

(2)相關知識點:final

final代表最終的,被它修飾的變數,不能二次賦值,可以視為常量

(3)特點

不寫public static final預設也有

(4)使用

介面名直接呼叫

(5)注意

A.被static final修飾的成員變數需要手動賦值

B.習慣上我們會將static final修飾的成員變數名大寫

11.物件導向(3)

11.物件導向(3)

(四)介面的特點

1.介面可以多繼承 -> 一個介面可以繼承多個介面

public interface InterfaceA extends InterfaceB,InterfaceC{}

2.介面可以多實現 -> 一個實現類可以實現一個或者多個介面

public class InterfaceImp1 implements InterfaceA,InterfaceB{}

3.一個子類可以繼承一個父類的同時實現一個或多個介面

public class Zi extends Fu implements InterfaceA,InterfaceB{}

4.注意:

繼承也好,實現介面也罷,只要是父類中或者介面的抽象方法,子類或者實現類 都要重寫

當一個類實現多個介面時,如果介面中的抽象方法有重名且引數一樣的,只需要重 寫一次

11.物件導向(3)

11.物件導向(3)

11.物件導向(3)

當一個類實現多個介面時,如果多個介面中預設方法有重名的,且引數一樣的,必須 重寫一次預設方法

11.物件導向(3)

11.物件導向(3)

11.物件導向(3)

(五)介面和抽象類的區別

相同點:

(1)都位於繼承體系的頂端,用於被其他類實現或者繼承

(2)都不能new

(3)都包含抽象方法,其子類或者實現類都必須重寫這些抽象方法

不同點:

(1)抽象類:一般作為父類使用,可以有成員變數,構造,成員方法,抽象方法等

(2)介面:成員單一,一般抽取介面,抽取的都是方法,視為功能的大集合

(3)類不能多繼承,但是介面可以

二.多型

1.物件導向三大特徵:封裝 繼承 多型

2.怎麼學:

(1)不要從字面上理解多型兩個字,要從使用形式上掌握

(2)要知道多型的好處

(3)要知道多型的前提

(一)多型的介紹

1.前提

(1)必須有子父類繼承或者介面實現關係

(2)必須有方法的重寫(沒有重寫,多型沒有意義),多型主要玩的是重寫方法

(3)new物件:父類引用指向子類物件

Fu fu = new Zi() ->理解為大型別接收了一個小型別的資料 -> double b = 10

2.注意

多型下不能直接呼叫子類特有功能

(二)多型的基本使用

11.物件導向(3)

11.物件導向(3) 11.物件導向(3)

11.物件導向(3)

(三)多型條件下成員的訪問特點

1.成員變數

11.物件導向(3)

11.物件導向(3)

11.物件導向(3)

看等號左邊是誰,先呼叫誰的變數

2.成員方法

11.物件導向(3)

11.物件導向(3)

11.物件導向(3)

看new的是誰,就先呼叫誰的成員方法,子類沒有找父類

(四)多型的好處

1.問題描述:

如果使用原始的方式neew物件(等號左右兩邊一樣),既能呼叫重寫的,還能調 用繼承的,還能呼叫自己特有的成員,但是多型方式new物件,只能呼叫重寫的, 不能直接呼叫子類特有的成員,那為啥還要用多型呢?

2.多型方式和原始方式new物件的優缺點:

原始方式:

(1)優點:既能呼叫重寫的,還能呼叫父類非私有的,還能呼叫自己特有的

(2)缺點:擴充套件性差

多型好處:

(1)優點:擴充套件性強

Fu fu = new Zi()

double b = 10;

b = 100L;

(2)缺點:不能直接呼叫子類特有功能

11.物件導向(3) 11.物件導向(3)

11.物件導向(3) 11.物件導向(3)

形參傳遞父類型別,呼叫此方法父類型別可以接收任意它的子類物件

傳遞哪個子類物件,就指向哪個子類物件,就呼叫哪個子類物件重寫的方法

(五)多型中的轉型

1.向上轉型

(1)父類引用指向子類物件

好比是:double b = 1;

2.向下轉型

(1)好比是強轉,將大型別強轉成小型別

(2)表現方式:

父類型別 物件名1 = new 子類物件() -> 向上轉型 -> double b = 1

子類型別 物件名2 = (子類型別)物件名1 -> 向下轉型 -> int i = (int)b

3.想要呼叫子類特有功能,需要向下轉型

11.物件導向(3)

(六)轉型可能會出現的問題

1.如果等號兩邊型別不一致,會出現型別轉換異常(ClassCastException)

2.解決:

在向下轉型之前,先判斷型別

3.怎麼判斷型別:instanceof

判斷結果是boolean型

4.使用:

物件名 instanceof 型別 -> 判斷的是關鍵字前面的物件是否符合關鍵字後 面的型別

11.物件導向(3)

相關文章