Java中抽象类和接口的配合使用

来源:互联网 发布:航空公司订票系统java 编辑:程序博客网 时间:2024/05/24 07:09
  1. 抽象类
    用abstract定义,用于抽象出一类物品的公共属性和方法,方法可提供默认的实现。如动物类、车类等等。显然意见,抽象类定义的初衷是为了继承。
    子类可以通过extends关键字实现类的继承,与C++不同,Java不能多继承,即:一个类只能有一个父类,所以某些特殊方法就尽量不要放在抽象类中。如动物类(Animal)的捕猎方法(catch)等。
  2. 接口类
    可以认为是一系列方法的集合,类可以通过implements实现接口,在Java中一个类可以实现多个接口。
  3. 典型应用
    我们为门定义一个抽象类Door,并定义抽象方法open和close。现在需定义一个告警门的类AlarmDoor,该门有告警功能(alarm方法)。 AlarmDoor本质上是Door,但同时它也拥有报警的行为功能。此时我们将此应用场合采用如下代码定义,可优雅的实现我们的意图。
abstract class Door{      abstract void open();      abstract void close();  }  interface Alarm{      void alarm();  }  class AlarmDoor extends Door implements Alarm{      void open(){}      void close(){}      void alarm(){}  }  
  1. 应用接口实现回调
    假设有下面一个应用场景:有一个农夫,他每天要给牛喂草,牛吃草后产奶给农夫。我们先定义奶牛类Cow,该类中有一个吃草方法(eat),在eat方法中需给农夫增加牛奶(简便起见,吃一个草加一个牛奶)。此时我们在Cow类中定义一个接口,并在类的构造函数中传入接口。然后在eat中调用该接口,实现牛奶的增加。
    农夫类Farmer实现增加牛奶接口(IFMilk),并实现接口的方法addMilk。农夫的喂牛方法Feed中,定义Cow对象,并传入this作为IFMilk接口的实例,成功实现回调。
public class Cow{    public Cow(IF_Milk iMilk)    {       mIFMilk = iMilk;    }    private IF_Milk mIFMilk;    public interface IF_Milk    {        void addMilk(int n);    }    public void eat(int nGrass)    {        mIFMilk.addMilk(nGrass);    }}public class Farmer implements Cow.IF_Milk{    public int myMilk = 0;    protected void Feed(int nGrass)    {        Cow c = new Cow(this);        c.eat(nGrass);    }    public void addMilk(int n)    {        myMilk += n;    }}
原创粉丝点击