java - 从父类继承时如何更改其构造函数的一部分?

标签 java inheritance subclass

我有一些类,我想用它来制作一个对象。但是,该类在其构造函数中设置了一个属性,这使得它对我来说无法使用。我无法编辑此类的代码,因为它存在于非常严格的代码库中。该属性在对象构造后无法更改,因此即使有 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 的 setter,并且您无法使用 Reflection那么就没有办法改变属性了。

关于java - 从父类继承时如何更改其构造函数的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30788638/

相关文章:

java - 使用正则表达式,如何检查某个字符串是否位于句子的开头?

用于操作和重叠图像的 Java 库

java - Java 的父类(super class)和子类

c++ - 为什么不覆盖基类函数?

java - 有没有办法在调用的时候不调用子类的方法?

python - python抽象基类的惯用多重继承

java - 使用 POI 创建单元格时出错

java - 如何将 .cer 证书导入 java keystore ?

c# - 抽象泛型父类可以自动获取子(扩展)类型吗?

c# - 为什么仅在实现接口(interface)后才重写方法?