一张图解释---Java多态

本文深入探讨Java中多态的概念及其应用,重点解释向上转型与向下转型的过程与规则,通过实例说明如何在不同场景下灵活运用多态特性,包括引用类型、参数传递与返回值多态等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.向上转型:编译器自动进行,不需要声明

Snowboard s = new Snowboard ();
Object o = s;   (相当于指向Snowboard的内部Object实例,所有类都继承于Object类)

①当o试图引用 Snowboard独有的方法时,是不会成功的
②当o引用被子类override过method时,调用的是该子类的method

2. 向下转型:强制类型转换,需要声明

① 先指向里面,可以随时向下转型指向外面
Object o = new Snowboard();
Snowboard s = (Snowboard) o ;

② 现在转型的父类引用必须是指向了子类对象,否则向下转型不成功
Object o = new object ();
Snowboard s = (Snowboard) o; //这样的向下转型是不成功的,因为已经o引用是指向Object类的实例的,并没有被子类继承。

3. 多态的三个用法:

1.引用类型可以是实际对象类型的父类
Animal [] animals = new Animal [5];
animals [0] = new Dog();
  animals [1] = new Cat();  
  animals [2] = new Wolf();
  animals [3] = new Hippo();  
  animals [4] = new Lion();
2. 参数可以多态
  class Ver {
    public void giveShot(Animal a){
      a.makeNoise();
    }
  }

  class PetOwner {
    public voi start(){
      Vet v = new Vet();
      Dog d = new Dog();
      Hippo h = new Hippo();
      v.giveShot(d);
      v.giveShot(h);
    }
  }

3. 返回值多态:《第一行代码》P375

    public class MyService extends Service {
      private DownloadBinder mBinder = new DownloadBinder();
      class DownloadBinder extends Binder {
      public void startDownload() {
      Log.d("MyService", "startDownload executed");
      }
      public int getProgress() {
        Log.d("MyService", "getProgress executed");
        return 0;
      }
    }
      @Override //当活动与Service成功绑定时,会回调这个方法
      public IBinder onBind(Intent intent) {
      return mBinder; // binder extends Object implements IBinder, 继承关系:IBinder > Binder > DownloadBinder
      }
    }

===================================================================================

    private ServiceConnection connection = new ServiceConnection() {
      @Override
        public void onServiceDisconnected(ComponentName name) {
        }
      @Override
        public void onServiceConnected(ComponentName name, IBinder service) { //Service返回的mbinder(实际是指向Ibinder)
          downloadBinder = (MyService.DownloadBinder) service; //所以向下转型成downloadBinder。
          downloadBinder.startDownload();
          downloadBinder.getProgress();
        }
    };



4. 参考资料:

①http://www.cnblogs.com/mengdd/archive/2012/12/25/2832288.html
②Headfirst Java

转载于:https://www.cnblogs.com/xiaoxiaoxin-love-ping/p/4690224.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值