将API类转换为Inherited类

nf3*_*743 0 java inheritance

为什么以下不起作用?这样投不可能吗?

我收到错误: 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;
}
Run Code Online (Sandbox Code Playgroud)

mil*_*lan 5

如果MyMusicFile延伸File,那么MyMusicFile也是一个File,但这不会成为File一个MyMusicFile.如果列出每个班级的所有超级课程,您将获得:

  • 文件:java.lang.Object
  • MyMusicFile:java.io.File,java.lang.Object

你可以在任何类型分配给它的类型或任何其他超类型(说ObjectFile,或文件到MyMusicFile).

您可以这样想:MyMusicFile拥有所有字段和方法File,以及一些额外的字段和方法.因此,将一个实例分配MyMusicFile给a File是安全的,因为它可以工作(具有所有必需的东西),但是File没有所有的东西MyMusicFile(缺少额外的东西),所以它不起作用.