【问题标题】:Skip class implementation in inheritance tree跳过继承树中的类实现
【发布时间】:2011-08-13 09:28:17
【问题描述】:

我有以下类结构:

Class Human, with message("Hello, ")
Class Townsmen extends Human, with message("I live in town.")
Class Merchant extends Townsmen, with message("I'm merchant.")

Merchant 实例是否可以使用super 呼叫说“你好,我是商人。”?我有一个Java程序,代码要复杂得多,但想法是一样的。此外,我无法修改 Human 和 Townsmen 类。

【问题讨论】:

    标签: java inheritance polymorphism


    【解决方案1】:

    好吧,你可以使用反射来获得你想要的东西(参见Why is super.super.method(); not allowed in Java?)。但是,不要!

    使用正确的设计可以解决您面临的问题。

    作为一个经验法则 - 如果您试图实现语言本身试图限制的非常独特的东西,那么您的设计可能有问题。 (我的 2 美分;))

    【讨论】:

      【解决方案2】:

      我能想到的只有: Class Merchant extends Human, with message("I'm merchant.")

      我认为你不能跳过你不喜欢的超类构造函数——这不是继承的工作原理。

      【讨论】:

        【解决方案3】:

        这在 Java 中是不可能的,它不允许多重继承。正确的做法是:

              Human
             /     
          TownMember
          /       \
         Townsmen  Merchant
        

        TownMember 具有城镇居民所继承的任何逻辑。

        由于您不能这样做,您需要让 Merchant 扩展 Human 并重新实现该逻辑。

        【讨论】:

        • 多重继承在这里并不是真正的问题。然而,跳过中间超类实现是。
        【解决方案4】:

        您可以让 Merchant 不调用超级方法并执行 Human.message 所做的任何事情。如果权限有问题,它可以使用反射。

        但是,商人似乎不是城镇居民,应该扩展人类。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-03-23
          • 1970-01-01
          • 2015-08-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多