在java.io.File中找不到构造函数File()

Leo*_*zen 0 java constructor overriding file

这可能很明显,所以请耐心等待.

是的,我知道java.io.File没有默认构造函数.
问题是,当我尝试扩展java.io.File时,它说"无法在java.io.File中找到构造函数File()",即使我重写了java.lang.Object中的默认构造函数.

这是我的代码:
AbsRelFile.java

import java.io.File;
public class AbsRelFile  extends File {
    File f;
    private AbsRelFile(){

    }
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误,即使我重写了构造函数.

注意:此课程尚未完成.不要评论为什么我不需要这个或关于这个类如何无用的评论.我刚收到此错误之前就开始写它了.

Nat*_* W. 8

因为你没有super(...)在你的默认构造函数中进行显式调用,所以它隐式地试图调用超类的默认构造函数,正如你所指出的那样,在这种情况下不存在(超级为一的情况)File).您的问题的解决方案是在默认AbsRelFile()构造函数中调用超级构造函数.如果您不想为您的类提供默认构造函数,则需要super(...)使用一些默认值进行调用.


sam*_*aur 5

定义构造函数时,Java会将超级构造函数的隐式调用作为构造函数的第一行插入.所以你的构造函数相当于:

private AbsRelFile(){
    super();
}
Run Code Online (Sandbox Code Playgroud)

由于超类中没有默认构造函数File,因此会出错.要解决此问题,您需要将超类构造函数的显式调用作为第一行:

private AbsRelFile(){
    super("fileName");
}
Run Code Online (Sandbox Code Playgroud)

最有可能的是,您还必须为AbsRelFile构造函数定义一些合适的参数,您可以将其传递给超级调用.

另一方面,构造函数不能被覆盖.所以说你重写Object类构造函数是错误的.你只是为AbsRelFile班级定义一个建设者.