界面将如何隐藏实现细节

时间:2015-11-18 09:42:18

标签: java interface

可能这是一个有点新手的问题。我总是听到有人说接口会隐藏实现细节。我无法理解这是什么意思。我会告诉我到目前为止所理解的内容。如果我的理解有任何不妥,请告诉我。< / p>

让我们假设,我们的代码中有一个List接口。

    List ls= new ArrayList()

通过更改上面的行

   ArrayList ls= new ArrayList();

我可以通过Ctrl +单击我的IDE中的方法来查看ArrayList的每个实现细节。

如果您将ls声明为类中的私有变量,并且仅向该变量提供getter将返回interface的引用。通过这种方式,您不知道该引用指向的Object。这样您就可以隐藏实现细节。

我认为除此之外还有更多内容。请让我更清楚一点。

编辑: - 我知道多态如何通过接口工作。我怀疑是隐藏实现细节意味着字面隐藏,或者它意味着最终用户不需要打扰它的实现细节。

2 个答案:

答案 0 :(得分:3)

实际上,并不是真的,但...... 隐藏的好处是,可以在不破坏getter的情况下切换List实现(ArrayList),比方说,BetterList。内部的BetterList可以有一些功能,不应该暴露。 此外,BetterList可以实现多个接口(List和一些&#34; ElevatedList&#34;例如)。因此,您可以针对指向同一对象但不同接口的不同用例公开2个getter。

例如:

public  class MyObject {
static class BetterList extends ArrayList<String>{
     void someInternalLogic(){
        //
    }
}
private BetterList internalList1=new BetterList();
public List<String> getList1(){
    internalList1.someInternalLogic();
    return internalList1;
}


private List internalList2=new ArrayList<String>();
public List<String> getList2(){
    return internalList2;
}

}

如果应该在内部控制该方法的执行,则getList1-getter会从List接口后面的外部用户隐藏someInternalLogic方法,这可能很有用。 getList2-getter隐藏了List接口后面的ArrayList-Type,可以自由地将internalList2的实现更改为f.e. LinkedList,可能会在以后优先考虑。

答案 1 :(得分:0)

关键词这里的概念是&#34;隐藏实现&#34;是灵活性,因为软件开发的唯一常量称为 CHANGE 。如果你被束缚于具体的类行为,你的代码的演变就会变得更难。当您对界面进行编程时,用户真的不关心实现细节。所以关于字面意思&#34;隐藏&#34;在您的IDE中,您可以通过界面名称(至少在eclipse上)看到该界面的所有实现pressig CTRL+T