为什么下面的方法不起作用?难道就不能这样投吗?
我收到错误:java.lang.ClassCastException:java.io.File 无法转换为 MyMusicFile
public class MyMusicFile extends java.io.File
{
public MyMusicFile(String pathname)
{
super(pathname);
}
public String artist;
public String album;
public String track;
public String year;
}
main(String[] args)
{
File file = new File("/home/1.txt");
MyMusicFile mmf = (MyMusicFile) file;
}
最佳答案
如果 MyMusicFile
扩展 File
,则 MyMusicFile
也是一个 File
,但这并不意味着 文件
一个MyMusicFile
。如果列出每个类的所有父类(super class),您将得到:
- 文件:java.lang.Object
- MyMusicFile:java.io.File、java.lang.Object
您可以将任何类型分配给它的类型或任何其他父类(super class)型(例如将Object
分配给File
,或将File分配给MyMusicFile
)。
你可以这样想:MyMusicFile
拥有像 File
这样的所有字段和方法,还有一些额外的字段和方法。因此,将 MyMusicFile
实例分配给 File
是安全的,因为它可以工作(具有所有必需的内容),但 File
则不行。没有 MyMusicFile
拥有的所有内容(缺少额外的内容),所以它不起作用。
关于java - 将 API 类转换为继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8684391/