import java.util.ArrayList;
class A1{
public void fun1() {
System.out.println("方法一");
}
public void fun2() {
System.out.println("方法2");
}
}
class B1 extends A1{
public void fun1(){
System.out.println("重写A1的方法1");
}
public void fun2(){
System.out.println("重写A1的方法2");
}
}
public class Test {
public static void main(String[] args) {
B1 b1 = new B1();
//callA(b1);
A1 a = b1;//子类能自动的转换成父类
// callA(a);
A1 a1 = new A1();
callA(a1);
}
//编译器自动将 类B1转换成A1类型
public static void callA(A1 a1){
/* a1.fun1(); //其实他还是调用的b1中的方法 这就是多态 这里只要传入A1的子类就行 以不变应万变 达到代码 的复用性 可扩充性 可维护性 模块化可插拔
a1.fun2();*/
B1 b1 = (B1) a1;//强制类型转换
b1.fun1();
b1.fun2();
/*B1 b1 = a1;
b1.fun1();
b1.fun2(); 这样是错误的*/
}
class A1{
public void fun1() {
System.out.println("方法一");
}
public void fun2() {
System.out.println("方法2");
}
}
class B1 extends A1{
public void fun1(){
System.out.println("重写A1的方法1");
}
public void fun2(){
System.out.println("重写A1的方法2");
}
}
public class Test {
public static void main(String[] args) {
B1 b1 = new B1();
//callA(b1);
A1 a = b1;//子类能自动的转换成父类
// callA(a);
A1 a1 = new A1();
callA(a1);
}
//编译器自动将 类B1转换成A1类型
public static void callA(A1 a1){
/* a1.fun1(); //其实他还是调用的b1中的方法 这就是多态 这里只要传入A1的子类就行 以不变应万变 达到代码 的复用性 可扩充性 可维护性 模块化可插拔
a1.fun2();*/
B1 b1 = (B1) a1;//强制类型转换
b1.fun1();
b1.fun2();
/*B1 b1 = a1;
b1.fun1();
b1.fun2(); 这样是错误的*/
}
}
打印结果 :
Exception in thread "main" java.lang.ClassCastException: A1 cannot be cast to B1
at Test.callA(Test.java:40)
at Test.main(Test.java:32)
打印结果 :
Exception in thread "main" java.lang.ClassCastException: A1 cannot be cast to B1
at Test.callA(Test.java:40)
at Test.main(Test.java:32)