可能这是一个有点新手的问题。我总是听到有人说接口会隐藏实现细节。我无法理解这是什么意思。我会告诉我到目前为止所理解的内容。如果我的理解有任何不妥,请告诉我。< / p>
让我们假设,我们的代码中有一个List
接口。
List ls= new ArrayList()
通过更改上面的行
ArrayList ls= new ArrayList();
我可以通过Ctrl +单击我的IDE中的方法来查看ArrayList
的每个实现细节。
如果您将ls
声明为类中的私有变量,并且仅向该变量提供getter
将返回interface的引用。通过这种方式,您不知道该引用指向的Object。这样您就可以隐藏实现细节。
我认为除此之外还有更多内容。请让我更清楚一点。
编辑: - 我知道多态如何通过接口工作。我怀疑是隐藏实现细节意味着字面隐藏,或者它意味着最终用户不需要打扰它的实现细节。
答案 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
。