这可能是一个新手问题。我总是听人说接口(interface)会隐藏实现细节。我无法理解这具体意味着什么。我会告诉我到目前为止我所理解的。如果我的理解有错误,请告诉我。
让我们假设,我们的代码中有一个像这样声明的 List
接口(interface)。
List ls= new ArrayList()
通过更改上面的行,例如
ArrayList ls= new ArrayList();
我可以通过在 IDE 中按住 Ctrl 键并单击方法来查看 ArrayList
的每个实现细节。
如果将 ls
声明为类中的私有(private)变量,并且仅向该变量提供 getter
将返回接口(interface)的引用。这样你就不知道该引用指向哪个对象。这样你就可以隐藏实现细节。
我认为事情远不止这些。请让我更清楚地了解这一点。
编辑:-我知道多态性如何通过接口(interface)发挥作用。我的疑问是隐藏实现细节意味着字面意义上的隐藏,或者意味着最终用户不需要担心它的实现细节。
最佳答案
其实并没有,但是…… 隐藏的好处是,可以通过 BetterList 来切换 List 实现 (ArrayList),而不会破坏 getter。内部 BetterList 可以具有一些不应公开的功能。 此外,BetterList 可以实现多个接口(interface)(例如 List 和一些“ElevatedList”)。因此,您可以为不同的用例公开 2 个 getter,它们指向同一对象,但接口(interface)不同。
例如:
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 接口(interface)后面向外部用户隐藏了 someInternalLogic 方法,如果应该在内部控制该方法的执行,这可能很有用。 getList2-getter 将 ArrayList-Type 隐藏在 List 接口(interface)后面,从而可以自由地将内部List2 的实现更改为 f.e. LinkedList,稍后可能会首选。
关于java - 接口(interface)如何隐藏实现细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776479/