java在扩展类中重写构造函数(装饰器模式)
假设我有一个基础抽象类Base
,它由类Base1
、Base2
和Base 3
扩展。它将包含我希望在装饰器类Decorator1
和Decorator2
中访问的信息的对象带入其构造函数。decorator类扩展了Decorator
,而这反过来又扩展了Base
InfoNeeded i = new InfoNeeded(user_input);
Base a = new Base1(i);
a = new Decorator1(a);
a = new Decorator2(a);
// etc...
我的问题是我需要访问i.getSomeValue1()
,i.getSomeValue2()
等等。。。在Decorator1
和Decorator2
内。起初,我尝试在我的抽象类Base
中放置一个构造函数来获取i
。然后我在那里实现了我所有的getSomeValue()
函数,这样我就可以调用a.getSomeValue()
来获取我需要的信息。然而,这导致了问题,因为Decorator
扩展了Base
,迫使其构造函数接受i
而不是a
有没有一种方法可以重写扩展类中的构造函数,这样它就不会被迫接受我不想要的东西
现在,我将我的getSomeValue()
函数复制并粘贴到我的所有基类和装饰器类中,这些类可以工作,但感觉很恶心。我很想找到一种避免这种重复的方法。谢谢
# 1 楼答案
答案是否定的,不能重写构造函数。如果父类需要某些内容,则必须使其可用
但是,你可以有多个构造函数,也许这会有帮助
关于
getSomeValue()
方法的重复,你能把它放在Base
类中,这样其他所有人都有它吗