繼承和多態


面向對象有三大特性:封裝、繼承和多態。個人認為,繼承和多態很像,繼承大的作用是體現多態。

繼承

1、什么是繼承

繼承是面向對象語言的一個重要特性。繼承是從父類中繼承了父類的相關方法等。也就是說,父類有的東西,子類能通過繼承獲得與父類相同的東西。

當創建一個類時,除非明確指定我們要繼承的類,否則我們默認的都繼承自Object類。

2、父類(超類)和子類

      當類A繼承了類B時,類B稱為類A的父類/超類,類A稱為類B的子類。

      繼承時,使用關鍵字:extends,子類訪問父類時,使用super關鍵字。

3、繼承的作用

      繼承最大的作用是代碼的復用。減少了代碼的冗余

      繼承表現出來的是父子類的相同特性。

4、以筆、圓珠筆和鉛筆為例。圓珠筆和鉛筆都是筆,都繼承自筆類,它們都能寫寫畫畫。

      新建Pens(父類)及BallpointPen(子類)、鉛筆(Pen),它們都有相同的寫方法和能寫的特點

public class Pens {
    public void write(){
        System.out.println("I am " + this.getClass().getSimpleName() + ", I can write");
    }

    /**
     * 特點
     */
    public void feature(){
        System.out.println("I can write");
    }
}
/**
 * 圓珠筆
 * 繼承了Pens類的特性(write和feature)
 */
public class BallpointPen extends Pens {
}
/**
 * 鉛筆
 * 繼承了Pens類的特性(write和feature)
 */
public class Pencil extends Pens {
}
@Test
    void contextLoads() {
        //BallpointPen
        BallpointPen ballpointPen = new BallpointPen();
        ballpointPen.write();
        ballpointPen.feature();
        System.out.println(".........................");

        //Pencil
        Pencil pencil = new Pencil();
        pencil.write();
        pencil.feature();
    }

/**
 * 輸出
* I am BallpointPen, I can write
* I can write
* .........................
* I am Pencil, I can write
* I can write
*/

      在子類和測試代碼中,不需要再另外寫任何的代碼,圓珠筆和鉛筆都能實現與筆類相同的特性。

多態

1、 什么是多態

多態是面向對象語言的另一個重要特性。

多態是同一特性在不同的類有不同的表現。

2、 多態的作用

a)       代碼復用。

b)       提高代碼的擴展性和維護性。

3、 還是以圓珠筆和鉛筆為例。圓珠筆和鉛筆都是筆,都可以寫寫畫畫,但圓珠筆是不可擦除的,而鉛筆是可擦除的。

 

/**
 * 圓珠筆
 * 繼承了Pens類的特性(write和feature)
 * 無法被擦除,重寫feature方法
 */
public class BallpointPen extends Pens {
    @Override
    public void feature() {
        super.feature();
        System.out.println("I can`t be erased");
    }
}
/**
 * 鉛筆
 * 繼承了Pens類的特性(write和feature)
 * 可以被擦除,重寫feature方法
 */
public class Pencil extends Pens {
    @Override
    public void feature() {
        super.feature();
        System.out.println("I can be erased");
    }
}

與上面相同的測試代碼,在圓珠筆和鉛筆中輸出了不同的特點(可擦除和不可擦除)

/**
     * 輸出
     * I am BallpointPen, I can write
     * I can write
     * I can`t be erased
     * .........................
     * I am Pencil, I can write
     * I can write
     * I can be erased
     */

 

二者的關系

繼承是不同的類有相同的特性、相同的實現等,而多態是相似的類有不同的特性或同一特性有不同的實現。要實現多態,需要先實現繼承。


免責聲明!

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



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