对Java对象的强制类型转换称为造型
- 从子类到父类的类型转换可以自动进行
- 从父类到子类的类型转换必须通过造型(强制类型转换)实现
- 无继承关系的引用类型间的转换是非法的
- 在造型前可以使用instanceof操作符测试一个对象的类型
代码案例:
class Person{
public Person(){
System.out.println("Person Constructor");
}
}
class Student extends Person{
public Student(){
System.out.println("Student Constructor");
}
public String getSchool(){
return "University";
}
}
class Graduate extends Student{
public Graduate(){
System.out.println("Graduate Constructor");
}
public String getInstructor(){
return "Dr Zhang";
}
}
public class Test {
//向上转型 多态 父类的引用指向子类对象
public void method(Person person) {
System.out.println("person="+person);
// System.out.pritnln(person.getSchool()); //非法,编译时错误
// System.out.pritnln(person.getInstructor()); //非法,编译时错误
System.out.println(person instanceof Person);//true
System.out.println(person instanceof Student);//true
System.out.println(person instanceof Graduate);//true
if (person instanceof Graduate) {//条件满足时,进行强制类型转换
Graduate graduate = (Graduate) person; // 将p强制转换为Graduate类型
System.out.println("graduate="+graduate);
System.out.println(graduate.getSchool());
System.out.println(graduate.getInstructor());
}
}
public static void main(String[] args){
Test t = new Test();
Graduate graduate = new Graduate();
System.out.println("graduate="+graduate);
t.method(graduate);
}
}
输出结果
Person Constructor
Student Constructor
Graduate Constructor
graduate=java2.Graduate@6d06d69c
person=java2.Graduate@6d06d69c
true
true
true
graduate=java2.Graduate@6d06d69c
University
Dr Zhang