gpt4 book ai didi

java - 接口(interface)如何隐藏实现细节

转载 作者:行者123 更新时间:2023-12-01 21:59:44 25 4
gpt4 key购买 nike

这可能是一个新手问题。我总是听人说接口(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com