抽象类和接口

1 应用场景介绍 

如果拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类;

如果想实现多重继承,那么必须使用接口。由于一个类只能有一个超类。但是,可以实现多个接口,因此可以使用接口来解决它。

2 举例说明

门和警报——门都有open( )和close( )两个动作,通过抽象类和接口来定义这个抽象概念。  

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

或者

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

     但是现在如果需要门具有报警alarm( )的功能,那么该如何实现?下面提供两种思路:

  • 将这三个功能都放在抽象类里面,但是这样一来所有继承于这个抽象类的子类都具备了报警功能,但是有的门并不一定具备报警功能;
  • 将这三个功能都放在接口里面,需要用到报警功能的类就实现接口中的open( )和close( ),也许这个类根本就不具备open( )和close( )功能,比如火灾报警器。

       从这里可以看出, Door的open() 、close()和alarm()根本就属于两个不同范畴内的行为,open()和close()属于门本身固有的行为特性,而alarm()属于延伸的附加行为。因此最好的解决办法是单独将报警设计为一个接口,包含alarm()行为,Door设计为单独的一个抽象类,包含open和close两种行为。再设计一个报警门继承Door类和实现Alarm接口。

复制代码
interface Alram {
    void alarm();
}
 
abstract class Door {
    void open();
    void close();
}
 
class AlarmDoor extends Door implements Alarm {
    void oepn() {
      //....
    }
    void close() {
      //....
    }
    void alarm() {
      //....
    }
}
复制代码
posted @ 2020-09-26 12:37  温故纳新  阅读(151)  评论(0编辑  收藏  举报