多态转型
子-->父 (小到大 自动转换): 也称为向上转型, 父类引用指向子类对象 Person p = new Student();
父-->子 (大到小 强制转换): 也称为向下转型, 父类引用转为子类对象 Student s = (Student)p;
强转风险
强转是存在风险的, 如果转为父类引用记录的真实子类对象,那么不会报错(否则会报ClassCastException)
解决方法:
可以在强转前,使用instanceof关键字, 判断变量对应的类型
public class Demo {
public static void main(String[] args) {
//多态创建一个teacher对象
Person person = new Teacher();
//需求: 想再调用一下老师的teach()方法
//person.teach();报错无法直接调用子类特有方法
//强制转换
/*
*在强制转换时,由于子类众多,导致强转类型出错,
*代码不会报错,但输出异常ClassCastException
*/
//例如下代码,将teacher类改为了sutudent类
//开始创建的teacher类与转换的student类不同
//Student student = (Student) person;
//student.study();
//解决方法:增加instanceof判断转换前后类是否一致
if(person instanceof Teacher) {
Teacher teacher = (Teacher) person;
teacher.teach();
}
}
}