我有以下类结构:
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类。
答案 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所做的操作。如果权限是个问题,它可以使用反射。
然而,看来商人不是市民,应该扩展人类。