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

本文介绍了Java中的抽象类和接口的基本概念及使用方法。通过具体示例解释了如何利用抽象类定义通用行为,并通过接口来扩展类的功能。还探讨了接口在回调机制中的应用。
  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;
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值