代码摘抄自《java就业培训教程》——张孝祥老师。
class A{
public void func1(){
System.out.println("A func1 is calling");
}
public void func2(){
func1();
}
}
class B extends A{
@Override
public void func1() {
System.out.println("B fun1 is calling");
}
public void func3(){
System.out.println("B func3 is calling");
}
}
public class C {
public static void main(String args []){
A a=new A();
callA(a); //a应用传递给callA
callA(new B()); //直接把B对象做为一个A对象传递给函数
}
public static void callA(A a){
if(a instanceof B){ //判断a指向的对象类型是否是B类型的
B b=(B)a; //因为a指向的对象原来就是B类型的
b.func1(); //所以,这里可以强制转化,然后真的调用B类型的func3方法
b.func2();
b.func3();
}else{
a.func1();
a.func2();
}
}
}
简单理一下上面的类型转换过程:在第二个callA()方法时,传递给该方法的是一个B类型的对象。由于callA函数所接收的是一个A类型的对象,所以这里进行了一次类型转化(子类型对象转换为父类型对象)。接下来到了if判断那