day08

先瞄准再开枪發表於2024-10-18

多型的好處:

    1、提高了程式的維護性(由繼承保證)
    2、提高了程式的擴充套件性(由多型保證)

向下轉型

public static void main(String[] args) {
        Fu1 f1 = new Zi1();
        f1.fun1();
//        f1.show1();
        //向下轉型
        //格式: 子類類名 變數名 = (子類類名)要轉型的變數名;
        Zi1 z1 = (Zi1)f1;
        z1.show1();
        //並不是任意兩個型別之間都可以做向下轉型,只有實際記憶體物件型別與要轉的型別一樣

介面

介面:表示一個類的額外功能的實現
    java提供了一個關鍵字表示介面:interface
    介面我們可以將它看作成一個特殊的類, 因為介面也會被編譯成一個class檔案

    介面注意事項:
        1. 介面中只能存在抽象方法, jvm預設會在方法前使用public abstract進行修飾, 剛學java推薦加上
        2. 類和介面是實現關係 可以透過關鍵字implements實現介面
        3. 當一個具體的類實現一個介面的時候, 必須要實現介面中所有的抽象方法
        4. 若一個抽象類實現一個介面的時候,可以選擇性地實現介面中的抽象方法
        5. 一個類可以同時實現多個介面,使用逗號隔開
        6. 介面和介面存在繼承關係, 並且一個介面可以同時繼承多個介面
        7. 介面中只能定義常量, 預設修飾符為public static final
        8. 介面無法例項化, 介面中不能出現構造方法

   面試題:
        java中允許多繼承嗎?
        答:
            若是類和類之間的繼承,只能單繼承,不能多繼承
            若是介面與介面之間的繼承,可以多繼承

abstract關鍵字

java為了表示現實生活中抽象的概念集合,提供了一個關鍵字給我們使用:abstract
    abstract 抽象的
    可以修飾類,修飾成員方法

    1. 被abstract修飾的類是抽象類, 抽象類不能被例項化
    2. 被abstract修飾的方法是抽象方法, 抽象方法不能有大括號實現
    3. 在抽象類,既可以存在具體實現的方法, 也可以存在抽象方法
    4. 若一個類中有抽象方法, 這個類一定是一個抽象類
    5. 當一個具體的類繼承一個抽象類, 必須要實現抽象類中的所有抽象方法
    6. 當一個抽象類繼承一個抽象類的時候, 可以選擇性地是否重寫抽象方法

抽象類與類中成員的關係:

    成員變數: 抽象類既可以存在變數, 也可以存在常量
    構造方法: 可以存在構造方法, 是為了將來在繼承關係做初始化的作用
    成員方法: 既可以是具體的實現方法, 也可以是抽象方法

思考

1. 一個類如果沒有抽象方法,可不可以定義為抽象類?如果可以,有什麼意義? 可以表示一種概念的集合
2. abstract不能和哪些關鍵字共存
        final 不能共存
        static 不能共存
        private 不能共存