2015-11-18 86 views
0

可能这是一个小菜鸟问题。我总是听到人们说界面会隐藏实现细节。我无法以特定的方式理解这是什么意思。我会告诉我到现在为止我的理解。请告诉我,如果我的理解有任何错误。界面如何隐藏实现细节

让我们假设,我们有一个List接口在我们的代码中声明如下。

List ls= new ArrayList() 

通过改变上述行状

ArrayList ls= new ArrayList(); 

我可以按Ctrl看到的ArrayList每个实施细节+点击我的IDE的方法。

如果您声明ls作为类中的私有变量,并且只给该变量的getter将返回接口的引用。这样你就不知道该引用指出的对象是什么。这样你就可以隐藏实现细节。

我觉得还有比这更多的东西,请给我更清楚的这个。

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

回答

3

实际上,并不是真的,但... 关于隐藏的好处是,可以通过切换List实现(ArrayList),让我们说BetterList,而不会破坏getter。内部BetterList可以具有一些功能,不应该暴露。 此外,BetterList可以实现多个接口(例如List和一些“ElevatedList”)。因此,您可以针对指向同一对象但不同接口的不同用例公开两个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-吸气隐藏List接口后面的外部用户的someInternalLogic方法,至极可能是有用的,如果该方法的执行应在内部的控制。 getList2-getter将ListList接口后面的ArrayList-Type隐藏起来,从而可以自由地将internalList2的实现更改为f.e. LinkedList,稍后可能会优先选择。

+0

我没有问关于多态性。我想知道它是否真的可以隐藏实现细节以外的任何方式,或者是否有任何不同的上下文来隐藏实现细节。 – udaybhaskar

+0

@udaybhaskar不,这就是隐藏实现细节的含义。你有从外部看到的接口(或API),实现是调用者不应该在意的。 Mikey的答案解释了它如何在现实生活中运作。 – Kayaman

+0

@Mikey你能详细解释一下吗?我很难理解你的答案。使用一些适当的示例代码或解释的一些链接。 – udaybhaskar

0

这里的关键词“隐藏实现”的概念是灵活性,因为软件开发中唯一的常量叫做CHANGE。如果你被束缚在一个具体的课堂行为中,你的代码的演变就更难了。当你对接口编程时,用户真的不关心实现细节。因此,关于在您的IDE中的字面“隐藏”,您可以通过接口名称(至少在eclipse上)看到该接口的所有实现均按CTRL+T