class A{ // 定义类A
public void fun1(){ // 定义fun1()方法
System.out.println("A --> public void fun1(){}") ;
}
public void fun2(){ // 定义fun2()方法
this.fun1() ;
}
};
class B extends A{ // 子类通过extends继承父类
public void fun1(){ // 覆写父类中的fun1()方法
System.out.println("B --> public void fun1(){}") ;
}
public void fun3(){ // 子类自己定义的方法
System.out.println("B --> public void fun3(){}") ;
}
};
public class PolDemo01 {
public static void main(String[] args) {
//向上
B c = new B() ; // 定义子类实例化对象
A a = c ; // 发生了向上转型的关系,子类 --> 父类
a.fun1(); // 此方法被子类覆写过
//向下
B b = (B)a ; // 此时发生了向下转型关系
b.fun1() ; // 调用方法被覆写的方法
b.fun2() ; // 调用父类的方法
b.fun3() ; // 调用子类自己定义的方法
}
}
- 向下转型的要求
在进行对象的向下转型之前,必须首先发生对象向上转型才可以,否则将出现对象转换异常,需要强制转换
- 向上转型
向上转型,父类子类都存在的方法,父类的会被覆盖,调用子类方法
父类没有子类优的方法,调用会出错