对象类型转换

来源:互联网 发布:房地产网络推广 编辑:程序博客网 时间:2024/05/29 19:39
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(); 这样是错误的*/
  }
  
  

}



打印结果 :

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)


0 0
原创粉丝点击