java - 将 API 类转换为继承类

标签 java inheritance

为什么下面的方法不起作用?难道就不能这样投吗?

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

相关文章:

java - 具有 ehcache null 的 Seam 缓存提供程序

java - 快速枚举问题

c++ - 如何从 Derived 中的 Base 实例调用 Base 中 protected 成员函数?

java - 如何使用泛型在 Java 中创建通用方法?

c# - 调用二级基类构造函数

java - "Getter and Setter methods for all the member variables"这是什么意思..?

java - JVM - 非 jit 编译的代码如何运行

ruby-on-rails - 无效的单表继承类型:Rails

java - JComboBox ItemListener 错误

c++ - 基于字符串的派生类选择 - C++