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. 多态的三个用法:

.引用类型可以是实际对象类型的父类
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

一张图解释---Java多态的更多相关文章

  1. 一张图解释java跨平台

  2. 一张图解释SQL Server集群、镜像、复制、日志传送

    一张图解释SQL Server集群.镜像.复制.日志传送 本文版权归作者所有,未经作者同意不得转载.

  3. 两张图解读Java异常与断言

    两张图解读Java异常与断言                                 --转载请注明出处:coder-pig 本节引言: 前天公布的"七张图解析Java多线程&quo ...

  4. 8张图理解Java

    一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选.如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟. 1.字符串不变性 下面这张图展示了这段代码做 ...

  5. 【转】8张图理解Java

    一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选.如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟. 1.字符串不变性 下面这张图展示了这段代码做 ...

  6. [ImportNew]8张图理解Java

    http://www.importnew.com/11725.html 1.字符串的不变性. 下面这张图展示了这段代码做了什么 String s = "abcd"; s = s.c ...

  7. 8张图理解Java(转)

    一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选.如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟. 1.字符串不变性 下面这张图展示了这段代码做 ...

  8. 一张图解释Hadoop IPC

    基于hadoop2.6.2.... 一张图Server启动,Client访问..... RPC是IPC的一种,IPC还有另外一种LPC,相关请看参考中的3 使用hadoop ipc步骤: 1.定义RP ...

  9. 一张图解释RxJava中的线程控制

    如果调用链中包含多个subscribeOn和observeOn,会是什么情况? 这实际上是一个至关重要的问题,因为在任何情况下,我们都应该弄清楚我们写的每一行代码到底是运行在哪个线程上.这个问题绝对不 ...

随机推荐

  1. Loading Image

    Android doesn’t handle animated gifs, but here’s one way to display an animated loading image that i ...

  2. Lambda表达式图解

    internal delegate int MyDel(int x); public class Lambda { ; };//匿名方法 ; };//Lambda表达式 ; };//Lambda表达式 ...

  3. asp.net 向后台提交 html 代码段 包括 <> 标签

    首先 在默认情况向标签类的东西是不会让你提交的 这是出于.net 的默认安全机制 我们要先在 <%@ page %> 里边加上  ValidateRequest="false&q ...

  4. javascript 获取调用属性的对象

    最近碰到一个javascript 的小问题,是和闭包有关的,来自cnode 论坛,很有意思. var o = (function() { var person = { name: 'Vincent', ...

  5. SQL类型转换以及自动在前面补0满足10位工号标示法

    1,自动在前面补0满足10位工号标示法 SELECT rtrim(ltrim(right(cast('00000000'+rtrim(CAST(数值 as int)) as varchar(20)), ...

  6. C++学习之运算符重载的总结

    C++学习之运算符重载的总结              运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不同行为的发生,C++为运算符重载提供了一种方法,即运算符重载函数 ...

  7. ExtJS 自定义组件

    主要参考的是官方文档 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  8. npm使用教程(未完)

    npm docs 设置镜像站 因为npmjs的官方网站,总会下载比较慢或打不开,所以通常需要设置一下镜像站来更好的安装npm库 npm install --registry http://regist ...

  9. 转:angular的decorator方法

    AngularJS实例 – 装饰$log 在AngularJS中,我们可以使用Angular内置或者自定义的services,在应用的各个部分之间分享数据和方法.假设你已经定义了一个service,但 ...

  10. bootstrap 更改container 的width

    参考:http://stackoverflow.com/questions/15884102/bootstrap-how-do-i-change-the-width-of-the-container ...