抽象类必须要被继承的
通过一个案例说明抽象类和接口额使用。在一个超市的管理软件中,所有的商品读具有价格,我们可以把商品的价格、设置和获取商品价格的方法,定义成一个抽象类Goods:
abstract class Goods {
protected double cost;
abstract public void setCost();
abstract public double getCost();
}
某些商品,例如食品,具有一定保质期,我们需要为这类商品设置过期日期,并希望在过期时,能够通知过期消息。对于这样的行为,我们是否可以把他们也整合在类Goods中呢?显然这并不合适,因为对于其他商品来说,并不存在这样的行为,比如服装,而Goods中的方法,应该是所有子类公有的行为。我们可以将过期这样的行为,设计在一个借口Expiration中,Goods的子类可以选择是否实现该接口。
interface Expiration {
void setExpiration();
void expira();
}
对于服装这类商品,我们需要继承抽象类Goods中的属性和方法,对于其中的抽象方法必须提供具体的实现,置于Expiration接口可以完全不管。而食品这样的商品,我们既要继承Goods抽象类,又要实现Expiration接口
class Clothes extends Goods {
public vod setCost() { ...... }
public double getCost() {
return cost;
}
}
class Food extends Goods implements Expiration {
.....................
}