跳过继承树中的类实现

时间:2011-08-13 09:28:17

标签: java inheritance polymorphism

我有以下类结构:

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

商家实例是否可以使用super来电说“你好,我是商家。”我有一个Java程序,代码要复杂得多,但想法是一样的。另外,我不能修改Human或Townsmen类。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

使用正确的设计可以解决您遇到的问题。

作为一个拇指规则 - 如果你试图实现语言本身试图限制的非常独特的东西,可能是你的设计出了问题。 (我的2美分;))

答案 2 :(得分:1)

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

      Human
     /     
  TownMember
  /       \
 Townsmen  Merchant

TownMember拥有商人继承的任何城镇居民的逻辑。

由于您无法做到这一点,因此您需要让Merchant扩展Human并重新实现该逻辑。

答案 3 :(得分:0)

您可以让Merchant不要调用超级方法并执行Human.message所做的操作。如果权限是个问题,它可以使用反射。

然而,看来商人不是市民,应该扩展人类。