一.向上转型:
天然发生(相当于认爹过程)
应用场景:参数统一化
语句:
父类 父类引用 = new 子类();
person per = new Student();
//子类一定可以变成父类 ,向上转型
例子:
class person{
public void fun(){
System.out.println("1.我是熊大!");
}
}
class Student extends person{
public void fun(){
System.out.println("2.我是熊二");
}
}
public class Test{
public static void main(String[] args) {
//向上转型
person per = new Student();
//当前方法是通过那个类new的,此方法也被子类所覆写,
//调用的一定是被覆写后的方法.
per.fun();
}
}
最后输出:发生了向上转型
二.向下转型
向下转型需要强转,发生了向下转型之前一定首先发生向上转型。
否则会抛出ClassCastException (运行时异常,类型转换异常,发生在两个毫无关系的类之间的强转时).
语句:
子类 子类引用 = (子类) 父类实例
//向下转型
Student stu = (Student) per;
引用对象 instanceof类
定义:表示该引用能否指向该类,返回true表示可以指向,返回false表示不能指向.
向下转型的标准格式如下:
if(!(per instanceof Student)){
per = new Student();
}
Student stu = (Student) per;
例子:
public class Test{
public static void main(String[] args) {
Person per = new Person();
//向下转型
if(!(per instanceof Student)){
per = new Student();
}
Student stu = (Student) per;
stu.fun();
}
}
应用场景:发生在父类引用需要调用子类扩充的方法时,才发生向下转型变为子类引用调用其扩充方法.
无论是向上转型还是向下转型,本质在于发生了方法覆写.(多态的本质)