不,我的意思是正好相反。在 Java 中:

  1. 子类转父类(向上转型):这是自动的且总是安全的。子类是父类的一个特化,因此子类的对象可以被视为是父类的一个实例。例如,如果 ExamineApproveNodeBaseNode 的子类,那么一个 ExamineApproveNode 对象也可以被视为一个 BaseNode 对象。

    ExamineApproveNode examineApproveNode = new ExamineApproveNode();
    BaseNode baseNode = examineApproveNode; // 安全的向上转型
    
  2. 父类转子类(向下转型):这需要显式的转换,并且只在目标对象实际上是指定子类的实例时才是安全的。在进行这种转换之前,你应该使用 instanceof 检查来确保转换是安全的。

    BaseNode baseNode = ...
    if (baseNode instanceof ExamineApproveNode) {
        ExamineApproveNode examineApproveNode = (ExamineApproveNode) baseNode; // 安全的向下转型
    }
    

在这个例子中,仅当 baseNode 实际上是 ExamineApproveNode 的一个实例(或该子类的实例)时,将 baseNode 向下转型为 ExamineApproveNode 才是安全的。如果不是这种情况,尝试进行这种转换将会导致 ClassCastException

简而言之,子类可以自动转换为其父类(向上转型),但将父类转换为子类(向下转型)需要显式转换,并且应该小心进行,以确保不会导致运行时错误。Java中支持父类转子类,不支持子类转父类吗?-LMLPHP

01-31 10:34