abstract class和interface有什么区别,分别在什么时候用?

首先温习一下抽象类和接口的概念和作用。

只声明方法而不去实现它的类叫做抽象类。
我们深入一点,在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

打个比方,假如我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

再说下接口,接口其实是抽象类的变体。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。另外补充一点,instanceof 运算符可以用来判断某对象的类是否实现了接口。

还是很迷糊吧?那么我们再举两个程序例子,可以慢慢体会。
首先是接口程序实例:
public interface iFoo1{
//做a+b计算返回结果
int doPlus(int a, int b);
}

public interface iFoo2{
//做a-b计算返回结果
int doMinus(int a, int b);
}

public Impl implements iFoo1,iFoo2{
public int doPlus(int a, int b){
return a+b;
}
public int doMinus(int a, int b){
return a-b;
}
.....
}


抽象类实例,注意抽象类中,一个子类只能继承一个父类
public abstract class absFoo{
public void doCommon(){
.......
}
public abstract int doSomething();
}

public class Foo extends absFoo{
public int doSomething(){
int res=0;
....
return res;
}
}


目前我用接口还是比较多一点。
程序中有些组件如果需要经常更换,那么可以灵活运用接口,在接口的实现方法中写出具体方法即可,而不必关心接口方法怎样调用,怎么来的,诸如此类。
这也正应证了面向对象设计中的低耦合概念。

哈,再补充下“高内聚,低耦合”
简单的说,高内聚就是提高模块内部的关联程度,低耦合就是降低模块之间的关联程度
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值