假设我有一个基类抽象类Base
,它由类Base1
,Base2
和Base 3
扩展。它在构造函数中包含一个对象,其中包含我要在装饰器类Decorator1
和Decorator2
中访问的信息。装饰器类扩展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
等。起初我尝试使用构造函数来抓取我的抽象类i
中的Base
。然后我在那里实现了所有getSomeValue()
函数,因此我可以调用a.getSomeValue()
来提取我需要的信息。但是,这会导致问题,因为Decorator
扩展了Base
,迫使其构造函数接受i
而不是a
。
有没有办法覆盖扩展类中的构造函数,以便它不会被迫接受我不想要的东西?
现在,我将getSomeValue()
函数复制并粘贴到我的所有基类和装饰器类中,但是感觉很糟糕。我很想找到避免这种重复的方法。谢谢!
答案 0 :(得分:0)
答案是否定的,你不能覆盖构造函数。如果父类需要某些东西,则必须使其可用。
但是,你可以拥有多个构造函数,这可能有帮助吗?
关于scala> val o = None
scala> (Seq('x' -> 1, 'y' -> 2) ++ o).toMap
res2: scala.collection.immutable.Map[Char,Int] = Map(x -> 1, y -> 2)
方法的重复,你能把它放在getSomeValue()
类中,以便所有其他人都拥有它吗?