不,我的意思是正好相反。在 Java 中:
-
子类转父类(向上转型):这是自动的且总是安全的。子类是父类的一个特化,因此子类的对象可以被视为是父类的一个实例。例如,如果
ExamineApproveNode
是BaseNode
的子类,那么一个ExamineApproveNode
对象也可以被视为一个BaseNode
对象。ExamineApproveNode examineApproveNode = new ExamineApproveNode(); BaseNode baseNode = examineApproveNode; // 安全的向上转型
-
父类转子类(向下转型):这需要显式的转换,并且只在目标对象实际上是指定子类的实例时才是安全的。在进行这种转换之前,你应该使用
instanceof
检查来确保转换是安全的。BaseNode baseNode = ... if (baseNode instanceof ExamineApproveNode) { ExamineApproveNode examineApproveNode = (ExamineApproveNode) baseNode; // 安全的向下转型 }
在这个例子中,仅当 baseNode
实际上是 ExamineApproveNode
的一个实例(或该子类的实例)时,将 baseNode
向下转型为 ExamineApproveNode
才是安全的。如果不是这种情况,尝试进行这种转换将会导致 ClassCastException
。
简而言之,子类可以自动转换为其父类(向上转型),但将父类转换为子类(向下转型)需要显式转换,并且应该小心进行,以确保不会导致运行时错误。