Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在构造函数中明确一个对象以及该对象的所有子类都可以插入?_Java_Constructor - Fatal编程技术网

Java 如何在构造函数中明确一个对象以及该对象的所有子类都可以插入?

Java 如何在构造函数中明确一个对象以及该对象的所有子类都可以插入?,java,constructor,Java,Constructor,我正试图使它能够像这样初始化类函数的实例 Function chain = new CosineFunction(new SquareRootFunction(new SineFunction())); 这是超级类函数的代码 public class Function { private Function innerFunction; public Function() { } public Function(Fu

我正试图使它能够像这样初始化类函数的实例

Function chain = new CosineFunction(new SquareRootFunction(new SineFunction()));
这是超级类
函数的代码

public class Function {
    
    private Function innerFunction;
    
    public Function() {
        
    }
    
    public Function(Function innerFunction) {
        this.innerFunction = innerFunction;
    }
    
    public double calculate(double value) {
        if(innerFunction != null) {
            return innerFunction.calculate(value);
        } else {
            return this.formula(value);
        }
    }
    
    protected double formula(double value) {
        return value;
    }

    public Function getInnerFunction() {
        return innerFunction;
    }

    public void setInnerFunction(Function innerFunction) {
        this.innerFunction = innerFunction;
    }
}
名称末尾带有“function”的任何其他类都是
function
的子类。唯一的
@覆盖
受保护的双重公式(双重值)

如果我尝试启动一个链,我会得到一个错误,说:

构造函数余弦函数(SquareRootFunction)未定义


我如何明确说明,构造函数中也允许使用
函数
的所有子类?

您的问题在于
余弦函数
的构造函数,因此您需要显示
余弦函数
的代码。构造函数不是继承的,因此您需要在每个子类中定义适当的构造函数。作为一种解决方法,应该可以定义(函数f){setInnerFunction(f)的方法
;在
函数中返回该方法;}
,然后将其用作(新SineFunction())的
新CosineFunction().of(新SineFunction())
。缺点是,
innerFunction
不能是
final
,但现在它不是(但可能应该是)。啊,我不知道构造函数不是继承的,谢谢