为什么以下方法不起作用?这样铸造是不可能的吗?

我收到错误: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


您可以将任何类型分配给它的类型或任何其他超级类型(例如ObjectFile或File到MyMusicFile)。

您可以这样想:MyMusicFile具有所有字段和方法,例如File,以及一些其他字段和方法。因此将MyMusicFile的实例分配给File是安全的,因为它可以工作(具有所有必需的东西),但是File并没有MyMusicFile拥有的所有东西(缺少其他东西) ),因此将无法正常工作。

关于java - 将API类转换为继承的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8684391/

10-10 19:27