栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在接口级别分离两个类意味着什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在接口级别分离两个类意味着什么?

让我们创建一个虚拟的例子。

A
套餐类别
packageA

package packageA;import packageB.B;public class A {    private B myB;    public A() {        this.myB = new B();    }    public void doSomethingThatUsesB() {        System.out.println("Doing things with myB");        this.myB.doSomething();    }}

B
套餐类别
packageB

package packageB;public class B {    public void doSomething() {        System.out.println("B did something.");    }}

如我们所见,

A
取决于
B
。没有
B
A
则不能使用。但是,如果
B
将来我们想用
a
代替
BetterB
呢?对于这一点,我们创建了一个界面
Inter
packageA

package packageA;public interface Inter {    public void doSomething();}

为了利用这个界面,我们

  • import packageA.Inter;
    B implements Inter
    B
  • 替换出现的所有
    B
    A
    Inter

结果是该版本的

A

package packageA;public class A {    private Inter myInter;    public A() {        this.myInter = ???; // What to do here?    }    public void doSomethingThatUsesInter() {        System.out.println("Doing things with myInter");        this.myInter.doSomething();    }}

我们已经看到,从

A
到的依赖关系
B
消失了:
import packageB.B
;不再需要。仅存在一个问题:我们无法实例化接口的实例。但是控制权的转换很容易解决:与其
Inter
在A构造函数中实例化某种类型的东西,构造器将需要一些
implements Inter
作为参数的东西:

package packageA;public class A {    private Inter myInter;    public A(Inter myInter) {        this.myInter = myInter;    }    public void doSomethingThatUsesInter() {        System.out.println("Doing things with myInter");        this.myInter.doSomething();    }}

通过这种方法,我们可以改变现在的具体实施Inter中A随意。假设我们编写了一个新类BetterB:

package packageB;import packageA.Inter;public class BetterB implements Inter {    @Override    public void doSomething() {        System.out.println("BetterB did something.");    }}

现在我们可以实例化A具有不同的Inter实现:

Inter b = new B();A aWithB = new A(b);aWithB.doSomethingThatUsesInter();Inter betterB = new BetterB();A aWithBetterB = new A(betterB);aWithBetterB.doSomethingThatUsesInter();

而且我们不必更改其中的任何内容A。现在,代码已解耦Inter,只要满足合同,我们就可以随意更改的具体实现Inter。最值得一提的是,我们可以支持将在以后编写并实现的代码Inter。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387881.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号