1. 程式人生 > >抽象類和介面的區別(使用舉例)

抽象類和介面的區別(使用舉例)

區別:

    1、抽象類代表的是“is-a”的關係,介面所代表的是"like-a"的關係。

    2、介面實際上是一個特殊的抽象類。

    3、抽象類可以有抽象方法,也可以有例項方法

         介面中所有的方法都是公開抽象方法

    4、具體類使用抽象類,用extends(繼承)

          具體類使用介面,用implements(實現)

    5、具體類實現介面,必須重寫介面中的所有方法!

    6、抽象類可以有自己的構造方法,介面不能有構造方法

舉例:

抽象類:

abstract class Door {
    public abstract void open();
    public abstract void close();
 }

介面:

interface Door{    
    public abstract void open();
    public abstract void close();
}

     如果需要新增一個報警alarm()的功能,該如何實現?

     如果把alarm()放到抽象類裡,但是有的門不一定具備報警的功能,所以此路不通!

     如果把alarm()放到接口裡,需要用到報警功能的類就需要實現這個介面中的open( )和close( ),也許這個類根本就不具備   open( )和close( )這兩個功能,比如火災報警器。所以此路也不通!

    以下為解決辦法:

interface Alarm{
    void alarm();
}
abstract class Door{
    void open();
    void close();
}
class AlarmDoor extends Door implements Alarm{
    void open(){
        //TODO    
    }
    void close(){
        //TODO    
    }
    void alarm(){
        //TODO    
    }
}