Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个类中的所有方法还是多态性实现?_Java_Polymorphism_Implementation - Fatal编程技术网

Java 一个类中的所有方法还是多态性实现?

Java 一个类中的所有方法还是多态性实现?,java,polymorphism,implementation,Java,Polymorphism,Implementation,以下是理解问题所需的知识: 我想将一个名为SCL的类连接到一个名为Region的类 现在,我有许多不同的方法来连接的实例 这两门课 写这篇文章就是Java 没有使用全局变量 因此,我可以创建几个利用多态性的类(大约9个),但每个类只有一个名为connect(…)的方法,其中包含许多不同的参数列表。我想这叫做函子类 例如,类“scltoregionoverlapircleconnect”将有一个如下所示的connect方法 public void connect(SCL scl, Region r

以下是理解问题所需的知识:

  • 我想将一个名为SCL的类连接到一个名为Region的类
  • 现在,我有许多不同的方法来连接的实例 这两门课
  • 写这篇文章就是Java
  • 没有使用全局变量
  • 因此,我可以创建几个利用多态性的类(大约9个),但每个类只有一个名为connect(…)的方法,其中包含许多不同的参数列表。我想这叫做函子类

    例如,类“scltoregionoverlapircleconnect”将有一个如下所示的connect方法

    public void connect(SCL scl, Region region, int radius, int overlapPercentage) {...} 
    
    而类“regionRegionNonOverlappSquareConnect”将有一个如下所示的连接方法

    public void connect(Region bottomRegion, Region topRegion, int sideLength) {...}
    

    我只需要创建一个名为ConnectionTypes的类,就可以有9个不同的方法,每个方法都有不同的方法签名


    每种实现的优缺点是什么?谢谢

    如果使用多态性,则在实例化SCL对象时确定连接方法。这有意义吗?或者,一个SCL班级是否可以通过各种不同的方式与该地区联系起来?在这种情况下,多态性就没有意义了。我们没有任何信息的一个重要方面是
    connect(…)
    方法的参数会发生什么变化。它们是否需要存储在SCL类中,在这种情况下,具有不同参数的多态性可能再次有意义,以便每个类都可以存储适当的参数


    另一个想法是,将一个SCL类连接到一个区域的行为是否真的是SCL类的一种方法,或者它应该位于其他地方?

    我建议您使用第二种方法

  • 类更少,因此该项目比另一种方式更清晰
  • 当你想使用你的工具时,你不需要移动9个类 方法,但仅限于一个类
  • 编程时,一条规则是不要重复代码;使用9个类, 你必须写9次声明,也许还要写9次 乘以相同的全局变量,比使用 一个
  • 重载,这意味着如果你必须做一件事 但有多种方式(例如,您必须打印一些对象,以及 结果将是一个字符串,但您需要为其编写不同的字符串 一种类型的对象等,你可以使用这种技术)你可以写 具有相同名称、相同输出但不同输入的9个方法
  • 继承:如果您想创建一个继承这些 方法,您只能使用一个类,因为java不支持 多重继承

  • 除了必须重新初始化全局变量以避免出现问题之外,我看不到任何缺点。

    让我澄清两件事:

    • 您考虑的是命令模式,而不是函子模式。区别在于后者也有一个检索返回值的方法,但是您的
      connect
      方法无效
    • 函子模式对于每个
      connect
      方法都不会有不同的签名;相反,每个具体类都有专用的参数设置器(特定于您想要连接的特定方式)和相同的、无参数的
      public void connect()
      方法。后者将是公共
      Connect
      超类型中声明的唯一方法
    如果你愿意,我可以加入一些示例代码

    赞成:如果在代码的任何地方使用Connect命令都有意义,而不需要知道您正在处理的9种方式中的哪一种,那么命令模式就是您的朋友


    缺点:您将拥有更多的代码,而封装纯粹的功能会大大降低代码的可理解性。

    使用第二种解决方案时,可扩展性/可维护性/可读性处于相当大的危险中。@Florisveleman-与第一种解决方案相比,这一点并不多,我会想,一种连接方式和另一种连接方式的区别是什么?它们的行为是否不同,参数是否不同,或者只是标签是否不同?如果连接的结果是某种类型的连接对象,那么不同的连接方式是否会产生不同类型的连接对象?您不需要详细说明,但您可以用9种或更多的方式连接这两个类似乎有些奇怪。也许你应该重新考虑每件事。
    连接
    ?你能详细说明一下吗。。