class A {
public void fun1() {
System.out.println(" A fun1 is calling!!!");
}
public void fun2() {
fun1();
}
}
class B extends A{
public void fun1() {
System.out.println(" B fun1 is calling!!!");
}
public void fun3() {
System.out.println(" B fun3 is calling!!!");
}
}
class Test {
public static void main(String[] args) {
A a = new A();
callA(a);
//子类可以隐式转换成父类,但父类不能隐式转换成子类(如果非要转可以采用强制类型转换)
//象下面
A c = new B(); //象这样一句是没有问题的
//B d = new A(); //象这样一句编译时就会报 "不兼容的类型" 错误
B e = (B)new A(); //象这样一句采用了强制类型转换虽编译时不会报错,但在运行时就会报
//"java.lang.ClassCastException" 错误
}
public static void callA(A a) {
B b = null;
if(a instanceof B) {
b = (B)a;
b.fun1();
b.fun2();
b.fun3();
}else {
a.fun1();
a.fun2();
}
}
}