深入理解向上转型与向下转型

       向上转型比较容易理解   :父类引用变量指向其子类的对象。为什么父类引用变量可以指向其子类的对象呢。因为父类引用里面所有的基本基本属性和方法都可以在其指向的子类对象里面找到。反过来,如果是子类引用变量指向其父类的对象,那么子类引用变量里面的属性和基本方法在其父类对象里面根本找不到,这时候就会抛出java.lang.ClassCastException。这就说明 向上直接转型可以 ,但是向下直接转型不行。

      那为什么向下转型前  先向上转型就可以了呢?简单的例子如下:

  package com.down;

public class Animal {
  public void eat(){
      System.out.println("我是   animal eat 方法-----");
  }
    
}


package com.down;

public class Cat extends Animal{
     public void eat(){
         System.out.println("我是一只 cat 的eat 方法----");
        
     }
     
     public void  catprint(){
         System.out.println("我是cat");
     }
}


package com.down;

public class Test {

    public static void main(String[] args) {
        Animal a=new Cat();//向上转型
        Cat cat=(Cat)a;
        cat.catprint();
        cat.eat();
        /*Cat cat=(Cat) new Animal();
        cat.catprint();*/
        
        
    }
    
    
}

        Animal 引用a 先指向一个Cat 对象,cat引用指向引用a 所指向的堆内存,也就是说引用cat此时和引用a 现在同时指向同一块堆内存。而这块堆内存里面存放的就是一个cat 对象 所以必然可以被引用cat 所指向。可以调用Cat里面所有独特的方法。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值