有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在扩展类中重写构造函数(装饰器模式)

假设我有一个基础抽象类Base,它由类Base1Base2Base 3扩展。它将包含我希望在装饰器类Decorator1Decorator2中访问的信息的对象带入其构造函数。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()等等。。。在Decorator1Decorator2内。起初,我尝试在我的抽象类Base中放置一个构造函数来获取i。然后我在那里实现了我所有的getSomeValue()函数,这样我就可以调用a.getSomeValue()来获取我需要的信息。然而,这导致了问题,因为Decorator扩展了Base,迫使其构造函数接受i而不是a

有没有一种方法可以重写扩展类中的构造函数,这样它就不会被迫接受我不想要的东西

现在,我将我的getSomeValue()函数复制并粘贴到我的所有基类和装饰器类中,这些类可以工作,但感觉很恶心。我很想找到一种避免这种重复的方法。谢谢


共 (1) 个答案

  1. # 1 楼答案

    答案是否定的,不能重写构造函数。如果父类需要某些内容,则必须使其可用

    但是,你可以有多个构造函数,也许这会有帮助

    关于getSomeValue()方法的重复,你能把它放在Base类中,这样其他所有人都有它吗