2014-11-14 45 views
1

我有一个主类DataManager,它具有扩展DataManager的子类FileHandler。Java构造函数不能应用给定类型

public class DataManager{ 
protected File file; 
private FileHandler fileHandler; 

public DataManager(File fileIn) { 
    this.file = fileIn; 
    fileHandler = new FileHandler(file); 
} 

//other class stuff} 

其他类:

public class FileHandler extends DataManager { 
    private File file; 

    public FileHandler() { 
     this.file = file; 
    } 

    //other class stuff } 

我得到的问题与错误,指出构造不能应用于给出的类型。这是我第一次使用Java继承,这个问题对于我想要的东西没什么帮助。

这里是什么,我从NetBeans中得到...

“类DataManager的构造函数的DataManager不能用于给定类型的一个更具体的版本; 要求:文件 发现:没有参数 理由:实际和正式参数列表长度不同 “

+1

存在'this.file = file'是你自己分配未初始化的'file'? – Arkadiy 2014-11-14 20:00:37

+0

我不认为你表现出足够的意图来获得很好的答案。为什么FileHandler是DataManager的一个子类? FileHandler实例是否会通过DataManager实例创建? – Shaun 2014-11-14 20:03:48

回答

4

FileHandler()隐式调用其父类的构造函数super()。

super()期望找到一个不带参数的构造函数。但是,只有需要文件的父级构造函数有1个构造函数。

,请参阅以下内容:

要改正错误电话:超(文件)

你的代码应该是:

import java.io.File; 

    public class DataManager { 

    protected File file; 

    public DataManager(File fileIn) { 
     this.file = fileIn; 
    } 
} 

// ------------- 

import java.io.File; 

public class FileHandler extends DataManager { 

    public FileHandler(File file) { 
     super(file); 
    } 
} 
+0

交互答案。这是正确的,这段代码解决了答案,但是你的文本在OP代码中描述了一个不同的问题:D。上面提到的(通过OP)错误是这行'new FileHandler(file)',因为'FileHandler'没有这样的构造函数。但仍值+1:D。 – Tom 2014-11-14 20:21:12

+0

@Tom我注意到了这一行,但从父类(DataManager)创建子实例(FileHandler)没有任何意义。你最终会得到循环依赖。 – 2014-11-14 20:24:11

+0

这是正确的,但它仍然是OP报告的错误。这就是为什么我喜欢你的答案,你不仅解决了这个“小”问题。 – Tom 2014-11-14 20:25:46

0

创建另一个构造..东阳new FileHandler(file)编译器知道一个参数的构造函数不FileHandler

public class FileHandler extends DataManager { 
    private File file; 

    public FileHandler() { 

    } 

    public FileHandler(File file) { 
     this.file = file; 
    } 
} 
相关问题