2012-03-02 109 views
0

我试图实现自己的File类,它从java.io.File扩展而来(请不要评价我:-),并且我试图通过构建我的类给java.io.File的实例如下:从父类构造的扩展类

public class File extends java.io.File { 

    public File (String fileName) { 
     super(fileName); 
    } 



    public File (java.io.File file) { 
     // the problem 
     super = file; 
    } 
    ... 
} 

我的问题是,我想我的构造类像super = file这显然是不正确的表达。你能建议如何做到这一点?

谢谢。

+3

你能解释为什么* *你想做到这一点?我们可能会提出更好的解决方案。 super =文件不起作用,因为没有“超级”实例,只有“this”的实例。我想你想要的是一个*包装*,而不是一个扩展。 – Kylar 2012-03-02 13:21:53

回答

1

如何

public File (java.io.File file) { 
    super(file.getPath()); 
} 
+0

这不是那种干净的解决方案,但它做我想要的。谢谢。 – 2012-03-02 13:52:27

4

您应该使用成分过继承,下面是它看起来像

class YourFile{ 
    private final File thatFile; 
    public YourFile(File file) { 
    thatFile = file; 
    } 
//getter for thatFile may be here 
} 
3

Super,像this是不可转让的,但你似乎已经知道了。如果我正确理解你,你想获得Ctor的副本。为此,您应该提取io.File的属性,并用该数据构建您自己的File

或使用组合物作为gasan建议。组成的缺点是你不能用你自己的代替常规java File类的用法。