对象类型转换

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值