如何在继承父类的构造函数时更改它的一部分?

时间:2015-06-11 18:26:47

标签: java inheritance subclass

我有一些课,我想用它制作一个物体。但是,此类在其构造函数中设置了一个属性,使其无法使用。我无法编辑这个类的代码,因为它存在于一个非常紧密的代码库中。构造对象后无法更改此属性,因此即使存在setter方法,它也不起作用(它是SWT gui框架的一部分,并且无法动态更改)

我的直觉告诉我将其子类化并改变我需要改变的东西。应该只采取几行,因为这个类的其他方面将保持不变。但是,由于您需要在子类的构造函数中调用的第一行是超级方法,这意味着在我甚至可以执行任何操作之前调用父类的构造函数。

是否有任何方法可以通过更改一个小属性来创建此类中的对象,而无需创建一个复制/粘贴其所有代码的全新类,除了一个小的更改喜欢8?

谢谢!

编辑:因为有人要求代码:

public class Parent {
    private Object important_object = null;
    public Parent() {
        important_object = new Object();
        important_object.important_property = BAD;
    }
}

public class Child extends Parent {
    public Child() {
           // how the heck do I make an instance of this
           // class that has important_property set to GOOD
           // instead of BAD?
    }
}

2 个答案:

答案 0 :(得分:2)

如果属性为private,则不会提供important_objectimportant_property的设置者,也无法使用Reflection,因此无法更改属性。< / p>

答案 1 :(得分:1)

有一种叫做classworking的东西,它允许你在运行时修改Java字节码,但它绝对不是一件容易的事情,而且可能对它来说太过分了。虽然这是一篇非常有趣的读物。

http://www.ibm.com/developerworks/library/j-cwt02076/

https://commons.apache.org/proper/commons-bcel/