java 为什么使用接口_为什么要使用接口

首先,如果没有接口会怎么样呢?一个类总归可以从另一类继承,难道还不够么?

没接口会怎么样一个对象需要知道其他的一些对象,并且与其他的对象发生相互作用,这是因为这些对象需要借助于其他对象的行为以便完成一项工作。这些关于其他对象的知识,以及对其他对象行为的调用,都是使用硬代码(Hardcode)写在类里面的,可插入性几乎为零。

如果要加入一个新的类,仅仅意味着加入新的硬代码,而不能给出动态的可插入行。

那么基于类的继承是否可以提供一点帮助呢?比如现在有一个具体类,提供某种使用硬代码写在类的行为。现在,要提供一些类似的行为,并且实现动态的可插入,也就是说,要能够动态地决定使用那种实现。一个可能的做法就是为这个类提供一个抽象超类,生命出子类要提供的行为,然后让这个具体类继承自这个抽象超类。同时,为这个抽象超类提供另一个具体子类,这个子类以不同的方法实现了超类所生命的行为。客户端可以动态决定那个具体子类。这是否可以提供可插入性呢?

答案是,这却是可以在简单的情况下提供可插入性。但是由于java语言是一个单继承的语言,换言之,一个类只能有一个超类,因此,在很多情况下,这个具体类可能已经有了以超类,这时候,要给它加上一个新的超类是不可能的,如果硬要加的话,就只好把这个新的超类加到已有的超类上面,形成超超类的情况;如果这个超超类的位置已经被占用了,就只好继续向上移动,直到移动到类等级结构的最顶端。这样一来,对一个具体类的可插入性设计,就变成了对整个等级结构中所有的类的修改。

这还是假设这些超类都是在设计师控制之下的。如果这些超类是一些软件商提供的,设计师无法修改,怎么办呢?如果有一个具体类,它有一个超类是Frame,那么新加入的超类就只好一直向上移动到java.lang.Object类上面,这怎么可能呢?

因此,没有接口可插入性就没有保证。

接口是对可插入性的保证    接口使可插入性变得可能。

在一个类等级结构中的任何一类可以实现一个接口,这个接口会影响到此类的所有子类,但是不会影响到此类的任何超类。此类将不得不实现这个接口所规定的方法,而其子类则可以从此类自动继承到这些方法,当然也可以选择置换掉所有的这些方法,或者其中的某一些方法。

这时候,这些子类就具有了可插入性。

关联的可插入性

正如前面所说的,一个对象需要完成一项任务,所以需要知道其他的对象,并且调用其他对象的方法。这个对象对其他对象的知识叫做关联(Association)。

如果一个关联不是针对一个具体类的,而是针对一个接口的,那么任何实现这个接口的类就都可以满足要求。换言之,当前对象并不在意所关联的是哪一个具体类。而仅仅关心这个类是否实现了某一个借口。

这样一来,就可以动态地将这个关联从一个具体类转换到另一个具体类,而这样做的唯一条件是它们都实现某个接口。

调用的可插入性

同样,一个对象不可避免地需要调用其他对象的方法。这种调用不一定飞的是某一个具体类,而可以是一个接口。这样一来,任何实现了这个接口的具体类都可以被当前对象调用;而当前对象到底调用的是哪一个具体的实例则完全可以动态地决定。

因此,接口提供了关联以及方法调用上的可插入性,软件系统的规模越大,生命周期越长,接口的重要性就越大。接口使得软件系统在灵活性和可扩展性、可插入性方面得到保证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值