天天看點

Java入門day09(final、多态、抽象類、接口)final關鍵字多态抽象類接口

final關鍵字

(1)最終的意思,可以修飾類,方法,變量。

(2)特點:

​ a:它修飾的類,不能被繼承

​ b:它修飾的方法,不能被重寫

​ c:它修飾的變量,是一個常量

​ (3)面試相關:

​ a:final修飾變量

​ 基本類型:值不能發生改變

​ 引用類型:位址值不能發生改變,但是對象的内容可以發生改變

​ b:初始化時機

​ a:隻能初始化一次

​ b:常見的給值

​ 1.定義的時候(推薦)

​ 2.構造方法中(非靜态常量)

class Demo {
    final int num;
    final int num2;
    static final int num3 = 30;//放在構造方法中會報錯
   
    public Demo() {
        num = 10;
        num2 = 20;
    }
}
           

多态

(1)同一個對象在不同時刻展現出來的不同狀态

(2)多态的前提:

​ a:有繼承或者實作關系

​ b:有方法重寫

​ c:有父類或者父接口引用指向子類對象

​ 多态的分類:

​ a:具體類多态

class Fu{ }
class Zi extends Fu
Fu f = new Zi();
           

​ b:抽象類多态

abstract class Fu{ }
class Zi extends Fu
Fu f = new Zi();
           

​ c:接口多态

interface Fu{ }
class Zi implements Fu{ }
Fu f = new Zi();
           

(3)多态中成員通路特點

​ a:成員變量

​ 編譯看左邊,運作看左邊

​ b:構造方法

​ 子類的構造方法都會預設通路父類的構造

​ c:成員方法

​ 編譯看左邊,運作看右邊

​ d:靜态方法

​ 編譯看左邊,運作看左邊

為什麼?

​ 因為成員方法有重寫。

(4)多态的好處:

A:提高代碼的維護性(繼承展現)

B:提高代碼的擴充性(多态展現)

(5)多态的弊端:

父不能使用子的特有功能。

​ 現象:子可以當父使用,父不能當子使用

(6)多态中的轉型

​ a:向上轉型

​ 從子到父,父類引用指向子類對象

​ Fu f = new Zi( );

​ b:向下轉型

​ 從父到子,父類引用轉為子類對象

​ Zi z = (Zi)f;//要求該f必須是能夠轉換為Zi的

抽象類

(1)把多個共性的東西提取到一個類中,這是繼承的做法。

​ 但是呢,這多個共性的東西,在有些時候,方法聲明一樣,但是每個具體的對象在具體實作的時候内容不一樣。是以,我們在定義這些共性方法的時候,就不能給出具體的方法體。而一個沒有具體的方法體的方法是抽象的方法。而一個類中如果有抽象方法,該類就必須定義為抽象類。

(2)抽象的特點

​ a:抽象類和抽象方法必須用關鍵字abstract修飾

​ b:抽象類不一定有抽象方法,但是有抽象方法的類一定是抽象類。

​ c:抽象類不能執行個體化

​ d:抽象類的子類

​ 抽象類:

​ 具體類:必須重寫抽象類中所有的抽象方法。

(3)抽象類的成員特點

​ a:成員變量

​ 可以是變量,也可是常量

​ b:構造方法

​ 有構造方法

​ c:成員方法

​ 有抽象,有非抽象

(4)抽象類的幾個小問題

​ A:抽象類有構造方法,不能執行個體化,那麼構造方法有什麼用?

​ 用于子類通路父類資料的初始化。

​ B:一個類如果沒有抽象方法,卻定義為抽象類,有什麼用?

​ 為了不讓建立對象。

​ C:abstract不能和哪些關鍵字共存

​ a:final 沖突

​ b:private 沖突

​ c:static 無意義

接口

(1)接口:擴充出來的功能

(2)特點

​ a:接口用關鍵字interface修飾

​ interface 接口名{ }

​ b:類實作接口用implements修飾

​ class 類名 implements 接口名{ }

​ c:接口不能執行個體化

​ d:接口的實作類

​ a:是一個抽象類

​ b:是一個具體的類,這個類必須重寫接口中的所有抽象方法

(3)接口的成員特點

​ a:成員變量

​ 隻能是常量

​ 預設修飾符:public static final

​ b:構造方法

​ 沒有構造方法

​ c:成員方法

​ 隻能是抽象的

​ 預設修飾符:public abstract

(4)類與類,類與接口,接口與接口

​ a:類與類

​ 繼承關系,隻能單繼承,可以多層繼承

​ b:類與接口

​ 實作關系,可以單實作,也可以多實作

​ 還可以在繼承一個類的同時,實作多個接口

​ c:接口與接口

​ 繼承關系,可以單繼承,也可以多繼承

(5)抽象類和接口的差別

​ A:成員差別

​ 抽象類:

​ 成員變量:可以變量,也可以常量

​ 構造方法:有

​ 成員方法:可以抽象,也可以非抽象

​ 接口:

​ 成員變量:隻可以常量

​ 構造方法:無

​ 成員方法:隻可以抽象

​ B:關系差別

​ 類與類

​ 繼承,單繼承

​ 類與接口

​ 實作,單實作,多實作

​ 接口與接口

​ 繼承,單繼承,多繼承

​ C:設計理念的差別

​ 抽象類 被繼承展現的是:”is a"的關系。抽象類中定義的是該繼承體系的共性功能。

​ 接口 被實作展現的是:"like a"的關系。接口中定義的是繼承體系中的擴充功能。