标题: 抽象类和接口 [打印本页] 作者: 杨强 时间: 2011-11-14 22:18 标题: 抽象类和接口 抽象类和接口的区别是知道的,但是到底是在什么情况下用抽象类,什么情况下用接口,就搞不清楚了,那位高手给指点指点。作者: 强子 时间: 2011-11-15 13:28
看到这个问题我也迷糊了
去网上查了资料 有个例子写的比较好
卖发动机
行为1:查询发动机的马力,发动机将返回一个表示马力的整数。
public abstract Motor{
abstract public int getHorsepower();
}
软件完成后 现在发现有一种发动机是电池驱动的 销售部门的人希望知道发动机的充电时间
行为2:查询电驱动发动机的充电时间,发动机将返回一个表示充电时间的整数。
public abstract BatteryPoweredMotor extends Motor{
abstract public int getTimeToRecharge();
}
软件修改完成之后 又新进了一种光驱动发电机 需要一定光能才能运转 客户又要这个需要多少光能的参数
行为3:查询光驱动发动机能够正常运转所需要的最小流明数,发动机返回一个整数。
public abstract SolarPoweredMotor extends Motor{
abstract public int getLumensToOperate();
}
上面的两种发动机偶尔需要检查一下发动机是光驱动还是电驱动,使用instanceof实现
if ( instanceof SolarPoweredMotor){...}
if ( instanceof BatteryPoweredMotor){...}
如果用接口来建立行为模型,就可以避免隐含地规定实现模式。例如,前面的几个行为改用接口定义如下。
行为1:
代码
public interface Motor(){
public int getHorsepower();
}
行为2:
代码
public interface BatteryPoweredMotor extends Motor(){
public int getTimeToRecharge();
}
行为3:
代码
public interface SolarPoweredMotor extends Motor{
abstract public int getLumensToOperate();
}
现在光电驱动的发动机可以描述为:
代码
public DualPoweredMotor implements SolarPoweredMotor, BatteryPoweredMotor{}