1. 程式人生 > 其它 >[JavaⅠ]4.1繼承與多型——繼承、super、抽象類

[JavaⅠ]4.1繼承與多型——繼承、super、抽象類

​ 就是子類繼承父類的屬性和行為,使得子類物件具有與父類相同的屬性、相同的行為,子類可以直接訪問父類中的非私有的屬性和行為。

繼承與抽象類

  • 定義

    ​ 就是子類繼承父類的屬性行為,使得子類物件具有與父類相同的屬性、相同的行為。子類可以直接訪問父類中的非私有的屬性和行為。

  • 好處

    1. 提高程式碼的複用性
    2. 類與類之間產生了關係,是多型的前提

1 繼承的格式

  • extends 關鍵字,可以宣告一個子類繼承另外一個父類

    class 父類 {
        ...
    }
    
    class 子類 extends 父類 {
        ... 
    }
    

2 重名的成員變數

​ 成員變數不重名無影響,子父類中出現了同名的成員變數時,在子類中需要訪問父類中非私有成員變數時,需要使用 super 關鍵字,修飾 父類成員變數,類似於之前學過的 this 。

使用格式:

super.父類成員變數名

程式碼

class Fu {
    // Fu中的成員變數。 
    int num = 6; 
}
class Zi extends Fu {
    // Zi中的成員變數 
    int num = 9; 
    public void show(){
        //訪問子類的sum
        System.out.println(sum);
        //訪問子類的sum
        System.out.println(this.sum);
        //訪問父類的sum
        System.out.println(super.sum);
    } 
}
class ExtendsDemo03 {
    public static void main(String[] args) {
        // 建立子類物件 
        Zi z = new Zi();
        // 呼叫子類中的show方法
        z.show(); 
    } 
}
//執行結果為 996

3 重名的成員方法(重寫)

​ 成員方法不重名無影響,如果子類父類中出現重名的成員方法,這時的訪問是一種特殊情況,叫做方法重寫 (Override)。

  • 方法重寫 :子類中出現與父類一模一樣的方法時(返回值型別,方法名和引數列表都相同),會出現覆蓋效

果,也稱為重寫或者複寫。宣告不變,重新實現

  • 子類可以根據需要,定義特定於自己的行為。既沿襲了父類的功能名稱,又根據子類的需要重新實現父類方法,從

而進行擴充套件增強。

public class Fu {
    //Fu類的成員方法
    public void show(){
        System.out.println("fu");
    }
}
public class Zi extends Fu{
    //Zi類的成員方法
    public void show(){
        //沿襲父類方法
        super.show();
        //重新實現
        System.out.println("zi");
    }
}
public class Demo02 {
    public static void main(String[] args) {
        // 建立子類物件
        Zi zi = new Zi();
        // 呼叫子類中的show方法
        zi.show();
    }
}

4 Java繼承的特點

  1. Java只支援單繼承,不支援多繼承
  2. Java支援多層繼承(繼承體系)
  3. 子類和父類是一種相對的概念。

5 抽象類

​ 父類中的方法,被它的子類們重寫,子類各自的實現都不盡相同。那麼父類的方法宣告和方法主體,只有宣告還有意義,而方法主體則沒有存在的意義了。

​ 我們把沒有方法主體的方法稱為抽象方法,包含抽象方法 的類就是抽象類

  • 抽象方法

    ​ 使用 abstract 關鍵字修飾方法,該方法就成了抽象方法,抽象方法只包含一個方法名,而沒有方法體。

    定義格式:

    修飾符 abstract 返回值型別 方法名 (引數列表);
    
  • 抽象類

    ​ 如果一個類包含抽象方法,那麼該類必須是抽象類

    定義格式:

    abstract class 類名字 {
    }
    

    ​ 繼承抽象類的子類必須重寫父類所有的抽象方法。否則,該子類也必須宣告為抽象類。最終,必須有子類實現該父 類的抽象方法,否則,從最初的父類到最終的子類都不能建立物件,失去意義。

    程式碼

    public abstract class Fu {
        public abstract void show();
    }
    public class Zi extends Fu{
    
        @Override
        public void show() {
            System.out.println("zi");
        }
    }
    public class Demo03 {
        public static void main(String[] args) {
            Zi zi = new Zi();
            zi.show();
        }
    }
    

    參考資料:

    ​ 《Java教程零基礎入門到精通IDEA版》黑馬程式設計師