有没有软件可以共享代码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有软件可以共享代码?相关的知识,希望对你有一定的参考价值。
比如三个人写一个网站、修改一份代码、修改后的代码三个人都可以看到、、、谢谢
不太明白你的意思,不过你用SVN软件的checkout功能是可以的,其实如果是需要三个人同时解决代码问题的话,QQ的远程功能也是可以的。来自:求助得到的回答 参考技术A svn、cvs、smartgit如何在一些子类之间共享代码?
【中文标题】如何在一些子类之间共享代码?【英文标题】:How to share code between some of the subclasses? 【发布时间】:2019-11-11 09:38:40 【问题描述】:我有一个包含多个子类的抽象类(截至目前已超过 20 个),并且我希望仅在其中 2 个子类之间共享代码和变量。
如果我将方法和变量放在超类中,那么所有子类都可以访问它们,但我希望只有 2 个子类可以访问它们,并且基本上可以知道它们的存在。 有没有办法做到这一点?
谢谢
【问题讨论】:
也许这两个子类应该扩展一个中间抽象类来扩展你的基类。 Java 中的类层次结构不限于 2 级 :) 你能解释一下这两个类和其他类的区别是什么吗?因为大多数人都建议使用多个级别的类,而使用接口(抽象类除外)可能更容易解决您的问题。 很可能你不需要inheritance
,但你需要composition
类并不是真正用于在代码之间共享数据,而是为常见行为建模。说你有“20 个子类”对我来说听起来像是一种代码味道。
【参考方案1】:
您可以通过应用composition instead of inheritance 原则来解决它:创建一个新类,其中包含应在 2 个子类之间共享的功能,并在 2 个子类中使用对新类实例的引用。
这样您将避免在子类和超类之间添加额外的层,并且您的代码将更加灵活且易于维护。
当向超类添加一些共享功能并通过继承获取它感觉不自然时,几乎总是建议使用这种方法。如有疑问,请始终问问自己,HAS-A 关系(组合)是否比 IS-A 关系(继承)更合适。
虽然在一个超类中将多个功能组合在一起可能会有所帮助,但如果您需要在多个类之间共享一个功能,使用组合来实现它可能会更合适。
【讨论】:
【参考方案2】:让我们创建一个实际示例,以便您了解应该如何解决这个问题。
我们有一个名为Alive
的类。我们将使用它作为Dog
、Wolf
和Human
的父类。我们需要Dog
和Wolf
有一个方法growl()
,但Human
没有。
class Alive
abstract void smell();
abstract void see();
abstract void hear();
class Canis extends Alive
abstract void growl();
class Human extends Alive
class Dog extends Canis
class Wolf extends Canis
这是继承层次结构的示意图:
Alive
/ \
/ \
/ \
Human Canis
/ \
/ \
Dog Wolf
【讨论】:
【参考方案3】:计算机科学中的所有问题都可以通过另一个间接层次来解决。(by David Wheeler)
因此,只需创建另一个(抽象)类来扩展您的基类并添加您只需要在那些特定子类中的常见内容。
上述引用并不总是正确的,但至少在概念上,另一个有用抽象通常是解决设计问题的最佳方法。
【讨论】:
@AndyTurner 更清楚地表明这是一个有点讽刺的引用。【参考方案4】:除了继承之外,您还可以使用组合。创建另一个类并将您的方法和变量放入其中,并在您的 2 个类中引用这个新类。此外,使用正确的打包和访问修饰符,您只能从这 2 个客户端类访问您的新类。 希望对您有所帮助。
【讨论】:
【参考方案5】:你可以从基类扩展抽象类,把你要共享的方法放在这个类中,然后从新的中间件类扩展你要共享方法的两个类。
【讨论】:
以上是关于有没有软件可以共享代码?的主要内容,如果未能解决你的问题,请参考以下文章