Java面向對象--繼承

類的繼承

類的繼承是非常重要的一點。繼承是面向對象的三大特徵之一,可以解決實際編程中代碼冗餘的問題,也是實現代碼重用的重要手段之一,
繼承:是軟件重用的重要手段之一,新類在不增加自身代碼的同時,從現有的類中繼承其屬性和方法,來使其變成自身的內容。這種行爲其實就稱爲繼承,這個時候新類就稱爲子類,現有的類就稱爲父類。

  1. 子類的創建
    Java之中類的繼承通過extends關鍵字實現的。
    例如:

    class son extends father{
    	//代碼塊
    } 
    

    此時,聲明瞭father是son的父類。
    所有的類均是java.lang.Object類的子類。

  2. 子類的構建方法
    子類的構造方法,在父類的構造方法之後再進行調用。
    例如:

    package com.azwcl.demo;
    
    class father{
        father (){
            System.out.println("我是父類!");
        }
    }
    
    class son extends father{
        son(){
            System.out.println("我是子類!");
        }
    }
    
    public class demo{
        public static void main(String[] args) {
            son aSon = new son();
        }
    }
    

    輸出的結果是:先輸出我是父類!,再輸出我是子類!
    Java語言的繼承中,執行子類的構造方法之前,會先進行調用父類中沒有參數的構造方法,其目的是爲了幫助繼承自父類的成員做初始化操作。
    嚴格意義上說,子類是不能繼承父類的構造方法的。但是子類可以調用父類的構造方法。

  3. 調用父類中特定的構造方法
    當Java代碼中並未指明子類調用弗雷迪額構造方法的時候,子類會先調用父類的午餐構造方法,進行初始化操作,但是當父類擁有多個構造方法的時候,我們可以通過super()方法來進行調用父類中特定的構造方法。

    package com.azwcl.demo;
    
    class father{
        father(){
            System.out.println("調用父類無參構造函數");
        }
        father(int demo){
            System.out.println("調用父類有參構造函數");
        }
    }
    
    class son extends father{
        son(){
            super(12);//調用父類有參構造函數了
            System.out.println("我是子類!");
        }
    }
    
    public class demo{
        public static void main(String[] args) {
            son aSon = new son();
        }
    }
    //輸出:
    //調用父類有參構造函數
    //我是子類!
    
  4. 在子類中訪問父類的成員
    子類中使用super不但可以訪問父類的構造方法,還可以訪問父類的成員。

    super.變量名;
    super,方法名;
    
  5. 覆蓋
    覆蓋的概念與方法的重載相似,只不過重載是指在同一個類中定義多個名稱相同但是參數個數或類型不同的方法。但是覆蓋則是在子類中定義名稱、參數個數與類型俊宇父類中完全相同的方法,用於覆蓋重寫父類中同名方法的功能。
    但是子類中不可以覆蓋父類中聲明爲finalstatic的方法

    class father{
        public void print(){
            System.out.println("我是爸爸!");
        }
    }
    
    class son extends father{
        public void print(){
            System.out.println("我是兒子!");//子類print方法覆蓋父類中print方法
        }
    }
    
    public class demo{
        public static void main(String[] args) {
            son aSon = new son();
            aSon.print();//輸出我是兒子!
        }
    }
    

    使用父類對象來訪問子類成員的時候,只限於“覆蓋”的情況發生時,也就是說父類與子類的方法名稱,參數個數與類型必須要完全相同。纔可以通過父類的對象調用子類的方法,如果只是某一方法僅存於子類中,這樣以父類對象去調用的時候就會發生出錯。

  6. 不可被繼承的成員與最終類
    final修飾成員變量,則說明這個變量是最終變量,是常量。如果用其修飾方法,則表示該方法是不能再被子類所覆蓋的,該方法是最終方法。
    所有已經被private修飾的方法,以及被包含在final類中的方法,都被默認爲是final的,這些方法不可以被子類所繼承和覆蓋,所以他們就是最終的方法。
    如果一個成員變量被static final兩個修飾符所限定的時候,它實際的含義就是常量。這樣的常量也只能在定義的時候被賦值。

  7. Object類
    一個特殊的類Object類,該類是java.lang類庫中的一個類,所有的類都是直接或者間接地繼承該類而得到的。Object類是所有類的源。
    Object類常用方法:

    常用方法 功能說明
    public boolean equals(Object obj) 判斷兩對象變量所指向的是否爲同一個對象
    public String toString() 將調用的對象轉換成爲一個字符串
    public final Class getClass() 返回運行時對象所屬的類
    protected Object clone() 返回調用該方法的對象的一個副本
    • equals()方法
      進行判斷兩個對象是否相等,是否爲同一個對象。
      對於字符串變量來說,使用"=="和"equals()"是不一樣的。 “==”是比較兩個變量本身的值,即比較兩個對象在內存中的首地址,但是使用equals()方法則是比較兩個字符串所包含的內容是否相同。但是對於非字符串類型的變量來說,“==”和“equals()”比較的都是兩個類類型的變量是否指向同一個對象。
    • toString()方法
      toString()方法的功能是將調用該方法的對象的內容轉換成爲字符串,並且返回其內容。
      但是其實返回的都是一些沒有意義,而且看不懂的字符串,所以,如果要是用這個方法,則需要重寫該方法。
  8. instanceof對象運算符
    判斷一個指定對象是否是指定類或者他的子類的實例。是,則返回true,不是,則返回false。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章