继承和实现的综合应用

根据封装好的jar包,想要实现接口下的某个方法的时候,但是如果直接用普通类去实现,那一定是要实现所有接口的,那么通过什么样子的封装,可以看上去只实现了接口的部分方法?

宏观看demo—UML图:

继承和实现的综合应用
继承和实现的综合应用

拆解

我把上面的UML进行拆解,拆解除了如下的内容

具体代码:

1、抽象类实现接口 (对比普通类实现接口)

图一:继承和实现的综合应用
图二:
继承和实现的综合应用

如上图所述,如果是普通类实现接口,那么是一定要实现接口下的所有方法的;但是抽象方法实现接口则不同,原因如注释

2、子接口继承父接口

接口之间是可以继承的,接口是特殊的类

图一:继承和实现的综合应用
图二:
继承和实现的综合应用

不仅仅是接口间继承,类和类间的继承也是一样的,这完全符合设计模式中的里式替换规则:任何类可以出现的地方,其子类一定可以出现。可以理解成子类可以替换父类。
那么再进一步看看下一个例子是不是满足我们的猜想:

3、普通类继承抽象类(显式继承,隐式继承)

图一:继承和实现的综合应用
图二:
继承和实现的综合应用
从图中可以看到,抽象方法是一定要被重写的,就像接口中的方法一样。(上面也提到,接口中的方法默认是用public abstract修饰的);其他抽象类的方法,是可以选择性的重写的。
但是怎么证明子类继承了父类的方法呢?
继承和实现的综合应用

这里涉及到了继承中的两个概念,显式继承和隐式继承,如图中phone和car放 是被子类重写了的,但是computer方法没有,但是并不影响store调用这个方法。
综上:可以看到,是满足我们上述的猜测,继承:正是顾名思义,继承下来父亲的所有方法,只是有显隐之分
那么是不是可以利用继承的隐式特点,让普通类通过继承抽象类;利用抽象类实现接口的特点,让抽象接口实现接口,就可以实现我们初始的想法。

4、普通类继承,实现接口的,抽象类

图一:
继承和实现的综合应用

图二:
继承和实现的综合应用
图三:
继承和实现的综合应用

至此,已经实现了我们一开始的想法,通过抽象类,在普通类和接口之间进行的了一层“隔离”

现在我们如果想要拓展普通类的方法,可以通过接口继承的方式来实现,如下,比如拓展一个ITBook的方法:

5、普通类实现,继承父接口的,子接口

如上第2个测试,通过普通类的实现可以拓展其Factory的方法
继承和实现的综合应用
PS:另外,除了接口间继承,还可以直接让普通类多实现接口,也是可以达到目的
这也正是设计模式中的接口隔离的实现:类不应该依赖它不需要的接口,一个类对另外一个类的依赖应该建立在最小的接口上。
好神奇,发现很多知识都是相通的。

6、普通类同时进行4.5步继承和实现

整合一下上面的所有内容,也就是实现一下文章最前的UML图
两个接口图略(如上2例子)
图一:
继承和实现的综合应用

图二:
继承和实现的综合应用