In Java, forced type conversion is divided into two types: basic data type and reference data type. The latter we discuss here is the forced type conversion of reference data type.
In Java, due to inheritance and upward transformation, subclasses can be converted into parent classes very naturally, but conversion from parent classes to subclasses requires forced conversion. Because the subclass has more attributes and stronger functions than the parent class, the conversion from the parent class to the subclass requires force. So, will it be successful as long as the parent class is converted to a subclass? In fact, this is not the case. The forced type conversion between them is conditional.
When we construct an object using a type constructor, the type of the object is already determined, which means that its essence will not change. In Java, we can use the parent class type to reference it through inheritance and upward transformation. At this time, we use a weaker type to reference a stronger object, which is feasible. But when coercing a weaker type to a stronger object, it may not work.
Give an example to illustrate. For example, there are two objects, Father and Son, in the system. First, we construct a Son object and then reference it with a Father type variable:
Father father = new Son();
Here the Son object instance is up-cast to father, but please note that the essence of this Son object instance in memory is still Son type, but its ability has been temporarily weakened. What if we want to become stronger? Restore its object type!
Son son = (Son)father;
This statement is feasible. In fact, the father reference is still of the Father type, but its capabilities are strengthened. After strengthening, it is transferred to the son reference. The Son object instance is in Under the reference of the son variable, the true body is restored and all functions can be used.
It was mentioned earlier that forced conversion of a parent class into a subclass is not always successful, so under what circumstances will it fail?
When the true identity of the reference type is the type of the parent class itself, forced type conversion will cause an error. For example:
Father father = new Father(); Son son = (Son) father;
This system will throw ClassCastException exception information.
Therefore, the compiler will only check whether there is an inheritance relationship between types during compilation, and if so, it will pass; and at runtime, it will check its true type, and if it passes, a ClassCastException will be thrown.
Therefore, in inheritance, a subclass can automatically transform into a parent class, but when the parent class is forced to a subclass, the forced conversion will only succeed when the true identity of the reference type is the subclass, otherwise it will fail.
The above is the content of Java Improvement Chapter (10)-----forced type conversion. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!