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

标签 java interface

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

相关文章:

c# - 如何在 C# 中将 DllImport 与接口(interface)一起使用?

java - 用 Java 实现多个接口(interface) - 有没有办法委托(delegate)?

java - 如何使用 ModelAndview 将模型(bean)值从 Controller 传递到 jsp 页面?

java - 实现嵌入在接口(interface)中的类

java - 如何在java中使用ArrayList制作XY折线图

java - Spring 无法 Autowiring ,有多个 `` 类型的 bean

c# - 解决一个接口(interface)中的歧义,该接口(interface)扩展了另外两个具有同名方法的接口(interface)

c# - .Net CLR 如何在内部实现 "Interface"?

java - 如何检查你是否仍然使用 jpa 连接到数据库

java - 捕获异常时写入的日志消息的单元测试