繁体   English   中英

从父类的构造函数继承后,如何更改它的一部分?

[英]How do I change part of a parent class's constructor when inheriting from it?

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

我的直觉告诉我将其子类化并更改需要更改的内容。 应该只花几行,因为此类的所有其他方面都将保持不变。 但是,由于您需要在子类的构造函数中调用的第一行是super方法,因此这意味着在我什至无法做任何事情之前就调用了父类的构造函数。

有什么办法可以使我更改该类的对象,而只更改一个小属性,而不必创建一个新的类来复制/粘贴其所有代码,除了一个小的更改(如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?
    }
}

如果该属性为private ,则不提供任何用于important_objectimportant_property属性的设置器,并且您不能使用反射 ,则无法更改该属性。

有一种叫做类工作的东西,它允许您在运行时修改Java字节码,但这绝对是不简单的,为此可能太多了。 虽然这是一个非常有趣的阅读。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM