Java學習筆記之六——Java類的繼承和多態(1)


一,Java類的繼承

1,為什么要繼承?

答:通過繼承可以使對對象的描述更加清晰,可以實現代碼的復用,可以實現重寫類中的變量或方法,可以實現在無源代碼的情況下修改被繼承的類。

2,Java的類如何實現繼承?

答:Java類的繼承是單一的,也是完全繼承的。通過關鍵詞extends關鍵字來實現。被繼承的類稱為父類,繼承父類的類稱為子類。繼承語法:public calss classname extends superclassname.因為Java類的繼承是單一的,所以extends后面只能指定一個父類。而完全繼承則是指“一個類繼承了父類的所有成員變量和成員方法。

例:在l類1中的平面坐標系中設置x和y,當要再定義一個空間坐標系的時候只需繼承類1,再在其子類中添加一個z軸就行了。

public class one{
    int x;
    int y;
    public one(){
        x = 0;
        y = 0;
    }
}

然后再定義類2,通過類2繼承類1:

public class two extends one{       //繼承類one
    int z;
    public one(){
    z = 0;
    }
}

這樣就實現了類的繼承。

3,類繼承中的隱藏/覆蓋/重載是怎么樣的?

答:(1)類的隱藏:隱藏發生在子類和父類之間,針對父類中成員變量和靜態方法而言的。當子類中聲明與父類中聲明的成員變量名相同時,則實現了對父類成員變量的隱藏。

  (2)類的覆蓋:覆蓋也是發生在子類和父類之間,是指在子類中聲明一個與父類具有相同的方法名/輸入參數列表/返回值/訪問權限等的方法,除過方法體不同外。在子類中重新編寫方法實現的功能。常被用於替換父類相同的方法,實現功能的更新。

例:

class three{
    public void Display(){     //定義父類中Display方法
        System.out.println("This is class three");
    }
}
class four extends three{        //繼承類three
    public void Display(){           //覆蓋父類three中的Display方法
        System.out.println("This is class four");
    }
}    

  (3)類的重載:可發生在父類與子類之間,也可發生在同一類中。是指在子類與父類之間或同一類中定義多個具有相同方法名/訪問權限等的方法。

例:

class five{
    public void Display(){      //父類中Display方法
        System.out.println("this is class five");
    }
}

class six extends five{      //繼承類five
    public void Display(String s){     //沖在父類中Display方法
        System.out.println(s);
    }
}

public class seven{
    public static void main(String[] args){
        six a = new six();
        a.Display();         //調用父類中Display方法
        a.Display("this is class six");    //調用子類中Display方法
    }
}

4,構造方法的重載.

在上例中 six a = new six();new后面是調用類的構造方法,如果當類沒有構造方法的時候,創建類對象時調用無任何操作的默認構造方法。當子類有自身的無形式列表的構造方法時,創建對象時,會先創建父類的對象,再創建子類的對象。

如下面代碼:

//第一個類-------父類
public class Output{
    public Output(){
        System.out.println("This is class Output");
    }
}


//第二個類-------子類
public class Input extends Output{
    public Input(){
        System.out.println("This is class Input");
    }
}


//第三個類
public class sample{
    public static void main(String[] args){
        Input a = new Input();
    }
}

上面代碼最后輸出為:

This is class Output

This is class Input

可見最后如果沒有構造方法,創建對象后會先調用父類對象,后調用子類對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM