gpt4 book ai didi

Java 继承 : should an extension of a class inherit the class?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:48:12 24 4
gpt4 key购买 nike

对于我当前的项目,我正在为 java File 类制作包装器,以及为路径 String(即 C :\用户\公共(public)\)。让我们调用 File 类的包装器 FileWrapper 和路径的包装器 PathWrapper

FileWrapper 显然必须有一个路径:FileWrapperFile 在磁盘上的位置。现在我的问题是...FileWrapper 是否应该包含 PathWrapper 类型的字段(以及 PathWrapperPathWrapper.getPath() 的访问器方法) ), 还是应该扩展 PathWrapper,从而继承 getPath() 方法?

我遇到的问题是 FileWrapper,严格来说,不是 Path。这只是一个文件。但在这种情况下,无论如何只使用继承似乎更简单。

我考虑的第二个解决方案存在另一个问题(在 FileWrapper 中创建一个 getPath() 方法)。我想创建一个 Path 接口(interface),FileWrapperPathWrapper 都会实现,以便允许 FileWrapper< 的通用列表PathWrapper。如果 FileWrapperPathWrapper 的子类,则不需要此接口(interface)。

最佳答案

OO 设计规则:优先使用组合而不是继承,因为组合(Has-a 关系)可以让您的代码更加灵活

另外,正如您所说,FileWrapper 不是 PathWrapper,您回答了您的问题。

你想把它们绑定(bind)在一起,你可以传递一个PathWrapperFileWrapper的构造函数。

例如,如果你想在一个Collection中获取两者,你可以制作一个Wrapper接口(interface),其中FileWrapper PathWrapper 是该层次结构中的 sibling ,并且共享可以由它们各自以不同方式实现的公共(public)抽象方法。

很多设计模式都可以应用到这个例子中,你需要做的就是先决定你想要什么。

关于Java 继承 : should an extension of a class inherit the class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18926818/

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