1. 程式人生 > 實用技巧 >Java抽象類和介面的應用場景(通俗版)

Java抽象類和介面的應用場景(通俗版)

1、抽象類定義:在面向物件的概念中,所有的物件都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果一個類中沒有包含足夠的資訊來描繪一個具體的物件,這樣的類就是抽象類。


定義真抽象,一遍愣是沒讀懂。。。


舉個例子:
有兩個人,一個是亞洲人,一個是非洲人,他們都有鼻子眼睛嘴,但是不僅僅只有鼻子眼睛嘴,這些共同的點就可以提取出來做一個抽象類,這個抽象類只描繪了鼻子眼睛嘴巴。


Java例項,把亞洲人和非洲人的共同點抽取出來,定義一個Person類:

public abstract class Person {
    private String eyes;
    private String mouth;
    
private String nose; private void look(){ System.out.println(">>>abstract>>>>看世界"); } }


2、介面定義:在JAVA程式語言中是一個抽象型別,是抽象方法的集合,介面通常以interface來宣告。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。


步驟1中用抽象類定義出兩種人的共同點,接下用兩個不同的介面定義不同的行為,例如亞洲人會跳遠,非洲人會搖滾。

public interface AsiaPersonActive {
//亞洲人會跳遠
void jump(); }

public interface AfricPersonActive {
//非洲人會搖滾。
    void rock();
}


如果不使用抽象類,那麼步驟1中look()方法就要在步驟2中兩個接口裡分別定義,因為亞洲人和非洲人都有look()這個行為,這樣會導致程式碼冗餘。

ps:①一個類可以實現多個介面,普通類必須實現介面所有方法,但是隻能單繼承。②抽象類和介面都不能例項化,抽象類中可以有普通方法和抽象方法,但是普通方法必須有方法體,抽象方法沒有方法體,子類繼承的時候要實現父類抽象方法,普通方法不用實現,直接呼叫。


3、建立子類,繼承抽象類,並實現對應的行為介面:

public class AsiaPerson extends Person implements AsiaPersonActive{

    @Override
    public void jump() {
        //呼叫父類的方法
        super.look();
        System.out.println(">>>>>亞洲人會跳高>>>>");
    }
}

public class AfricPerson extends Person implements AfricPersonActive {
    @Override
    public void rock() {
        super.look();
        System.out.println(">>>非洲人會搖滾>>>>");
    }
}


4、寫一個測試類:

public class Test {

    public static void main(String[] args) {
        AsiaPerson asiaPerson=new AsiaPerson();
        asiaPerson.jump();
        AfricPerson africPerson=new AfricPerson();
        africPerson.rock();
    }
}


輸出結果:
>>>abstract>>>>看世界
>>>>>亞洲人會跳高>>>>
>>>abstract>>>>看世界
>>>非洲人會搖滾>>>>



結論:
抽象類的應用場景一般用於抽取不同事物的共有特性,然後可以用介面實現不同事物的不同行為。遇到需求,先分析不同的物件是否有共同點,比如門,都可以開和關,這個就可以抽取出來定義一個抽象類,而有的門有門鈴可以摁,有的門沒有,那就將有門鈴的物件實現摁門鈴這個動作的介面。