为什么以下方法不起作用?这样铸造是不可能的吗?
我收到错误:java.lang.ClassCastException: java.io.File cannot be cast to 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
,但这不会使File
成为MyMusicFile
。如果列出每个类的所有超类,则会得到:
文件:java.lang.Object
MyMusicFile:java.io.File,java.lang.Object
您可以将任何类型分配给它的类型或任何其他超级类型(例如Object
到File
或File到MyMusicFile
)。
您可以这样想:MyMusicFile
具有所有字段和方法,例如File
,以及一些其他字段和方法。因此将MyMusicFile
的实例分配给File
是安全的,因为它可以工作(具有所有必需的东西),但是File
并没有MyMusicFile
拥有的所有东西(缺少其他东西) ),因此将无法正常工作。
关于java - 将API类转换为继承的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8684391/