接口与抽象类的对比与思考

接口和抽象类,作为 Java 解决单一继承带来的 “类的丰富度不足”的问题的2种方法。有各自的特点,在此进行一个总结。

 

1、 出现此种技术的原因不同。

 

抽象类的出现,是建立在运用 父类引用指向子类对象的 的多态技术之上的。

在反复使用这种多态技术的时候,发现,每次都是运用 子类 进行实例化,父类并没有参与实例化的机会。既然不会被实例化,那就把父类实例化的能力除掉,免生枝节。

 

接口的出现,是因为发现运用 抽象类 不能解决一个问题:没有继承关系的类之间也可以有共同的行为,如何把这些共同的行为 抽取 出来,单独成立一个单元,那么问题就解决了。从而出现了接口:为其他类提供 独立的 “零部件”,需要,就接口进行实例化,谁都可以找接口要,无需继承关系的 “硬条件”。

 

2、 语法不同

 

关键字

命名

属性

构造方法

抽象类

abstract

同普通类

Public/private/static/protect/默认

必须有

接口

interface

***able

Public static final

 

 

主要作用

初始化块

已经实现的方法

使用方式

抽象类

作为父类

可有可无

被继承(extends), 单继承

接口

绑在类上使用

被实现(implements),多实现

 

3、设计目的不同

抽象类的主要目的:保证设计者的 设计意图 被保存完整的传递下去。

设计者希望自己设计的类不被使用类的人修改,必须按照他的意图实现下去。从而达到控制调用类的人。

 

接口的主要目的:将设计和实现分离。

设计接口,就是把每个部件的框架画出来,具体实现全权交给实现的人。

实现者可以按照自己的意图对接口进行拼接组合和实现设计,达到实现者自己的目的。

 

抽象类的侧重点:类的设计者的意图。

接口的侧重点:实现接口的实现者的意图。

 

 

个人的理解:

为什么在有 抽象类的情况下, 依旧设计 接口? 二者的作用差不多: 对业务进行抽象, 让实现着根据设计者的意图进行实现。

因为: 抽象类必须被继承, 且为单继承。 

大千世界, 不可能一个抽象类, 将所有的行为和属性都包含了。 

有也极其复杂。

 

为了实现 “多继承”, 让不同的类进行组合:

接口最大的作用: 写抽象方法, 让没有继承关系的类可以共享行为, 又可以各有各的实现;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值