java物件導向編程(六)--四大特徵之繼承、方法重載和方法覆蓋

來源:互聯網
上載者:User

標籤:style   blog   color   java   使用   strong   ar   div   

一、繼承

1.繼承的概念

繼承可以解決代碼複用,讓我們的編程更加靠近人類思維。當多個類存在相同的屬性(變數)和方法時,可以從這些類中抽象出父類,在父類中定義這些相同的屬性和方法,所有的子類不需要重新定義這些屬性和方法,只需要通過extends語句來聲明繼承父類。文法如下:

                                      class 子類 extends 父類

這樣,子類就會自動擁有父類定義的某些屬性和方法。另外,並不是父類的所有屬性、方法都可以被子類繼承。父類的public修飾符的屬性和方法,protected修飾符的屬性和方法,預設修飾符屬性和方法能夠被子類繼承,private修飾符的屬性和方法不能被子類繼承。

2.案例:

//功能:說明繼承的重要性package com.davperson;//包名public class Demo117 {    public static void main(String[] args) {        Pupil p1=new Pupil();        p1.printName();    }}//將學生的共有屬性提取,做一個父類class Stu{    //定義成員屬性    protected int age;    public String name;    public float fee;    private String job;//私人將不被繼承        //編程中,如果你不希望子類繼承某個屬性或方法    //則將其聲明為private即可    public void printName(){        System.out.println("名字"+this.name);    }}//小學生類class Pupil extends Stu{    //交學費    public void pay(float fee){        this.fee=fee;    }}//幼兒class Pre extends Pupil{    //交學費    public void pay(float fee){        this.fee=fee*1.5f;    }}//中學生類class MiddleStu extends Stu{    //交學費    public void pay(float fee){        this.fee=fee*0.8f;    }}//大學生類class ColStu extends Stu{    //交學費    public void pay(float fee){        this.fee=fee*0.1f;    }}

3.繼承--注意事項

  1、子類最多隻能繼承一個父類(指直接繼承)

  2、java所有類都是Object類的子類 (所有的子類都可以逐級繼承,例:爺->父->子->孫)

  3、JDK6中有202個包3777個類、介面、異常、枚舉、注釋和錯誤

  4、在做開發的時候,強烈建議大家多查jdk協助文檔

  5、在使用類時,實在不知道怎麼辦,多使用搜尋引擎

至此,關於類的定義又可以跟進一步得到完善:

package 包名;class 類名 extends 父類{            成員變數;                  構造方法;    成員方法;}

二、方法重載和方法覆蓋

在講解多態前,必須講解方法重載(overload)和方法覆蓋(override)。

1.方法重載(overload)

簡單的說:方法重載就是在類的同一種功能的多種實現方式,到底採用哪種方式,取決於調用者給出的參數。

案例:

/*  方法重載(overload)getMax  寫一個類(Abc),編寫方法可以接收兩個整數,返回兩個數中較大的數[Demo119.java]*/public class Demo119{    public static void main(String []args){        Abc2 abc1=new Abc2();        System.out.println(abc1.getMax(12,14));        System.out.println(abc1.getMax(24f,20f));    }}class Abc{    //返回較大的整數    public int getMax(int i,int j){        if(i>j){            return i;        }else{            return j;         }    }                //返回較大的float類型數    public float getMax(float a,float b){        if(a>b){            return a;        }else{            return b;         }    }

關於方法重載的更多說明:

1、方法名相同

2、方法的參數類型,個數,順序至少有一項不同

3、方法傳回型別可以不同(只是傳回型別不一樣,不能構成重載)

4、方法的修飾符可以不同(只是控制存取修飾詞不同,不能構成重載)

2.方法覆蓋(override)

方法覆蓋就是子類有一個方法,和父類的某個方法的名稱、傳回型別、參數一樣,那麼我們就說子類的這個方法覆蓋了父類的那個方法。如下例Cat類中的cry方法就覆蓋了Animal類的cry方法。

//子類方法覆蓋父類方法[Demo120.java]public class Demo120{    public static void main(String []args){        //建立一隻貓        Cat cat1=new Cat();            cat1.cry();        Dog dog1=new Dog();            dog1.cry();    }}//動物類class Animal{    int age;    String name;    //都會叫    public void cry(){        System.out.println("我是動物,不知道怎麼叫");    }}//貓貓類class Cat extends Animal{    //覆蓋父類方法    public void cry(){        System.out.println("貓貓叫!");    }}//狗狗類class Dog extends Animal{    //覆蓋父類方法    public void cry(){        System.out.println("汪汪叫!");    }}

關於方法覆蓋的更多說明:

方法覆蓋有兩點一定要注意:

1、子類的方法的傳回型別,參數,方法名稱,要和父類的傳回型別,參數,方法名稱完全一樣,否則編譯出錯。

2、子類方法不能縮小父類方法的存取權限。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.