一张图解释---Java多态

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
时间: 2024-08-25 01:51:59

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

8张图理解Java

1.字符串不变性 下面这张图展示了这段代码做了什么 1 2 String s = "abcd"; s = s.concat("ef"); 2.equals()方法.hashCode()方法的区别 HashCode被设计用来提高性能.equals()方法与hashCode()方法的区别在于: 如果两个对象相等(equal),那么他们一定有相同的哈希值. 如果两个对象的哈希值相同,但他们未必相等(equal). 3.Java异常类的层次结构 图中红色部分为受检查异常.它

七张图解读Java多线程

七张图解读Java多线程 --by:coder-pig,转载请注明出处~ 本节引言: 如题,笔者把Java多线程一些概念性的东西以及一些基础的东西都归纳到这七张图中,其中囊括 基本的多线程概念,创建线程,线程组,线程池,以及自定义简单的线程池,还附有代码, 大家也可以像笔者一样,把这七张图mark后打印出来,偶尔回味回味~ J2SE多线程 Part 1 J2SE多线程 Part 2 J2SE多线程 Part 3 J2SE多线程 Part 4 J2SE多线程 Part 5 J2SE多线程 Part

两张图解读Java异常与断言

两张图解读Java异常与断言                                 --转载请注明出处:coder-pig 本节引言: 前天发布的"七张图解析Java多线程"大家的反响不错,嗯呢,今天再来两张吧, 关于Java异常与断言的,涉及到的东西有: ①什么是异常,为什么会出现异常,异常处理机制模型,常见异常信息总结,检验异常与非检验异常; 异常的捕获:try-catch块,finally块,多重catch块,try-catch块的嵌套; 异常的声明:throws回避异

疯狂Java学习笔记(60)----------8张图理解Java

1.字符串不变性 下面这张图展示了这段代码做了什么 1 2 String s = "abcd"; s = s.concat("ef"); 2.equals()方法.hashCode()方法的区别 HashCode被设计用来提高性能.equals()方法与hashCode()方法的区别在于: 如果两个对象相等(equal),那么他们一定有相同的哈希值. 如果两个对象的哈希值相同,但他们未必相等(equal). 3.Java异常类的层次结构 图中红色部分为受检查异常.它

8张图理解Java(转)

一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选.如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟. 1.字符串不变性 下面这张图展示了这段代码做了什么 1 2 String s = "abcd"; s = s.concat("ef"); 2.equals()方法.hashCode()方法的区别 HashCode被设计用来提高性能.equals()方法与hashCode()方法的区别在于: 如果两个对象相等(eq

一张图解释Hadoop IPC

基于hadoop2.6.2.... 一张图Server启动,Client访问..... 使用hadoop ipc步骤: 1.定义RPC协议 2.实现RPC协议 3.构造和启动RPC SERVER 4.构造RPC Client并发送请求 参考: http://www.cnblogs.com/dycg/p/3934394.html http://www.cnblogs.com/dycg/p/rpc.html 我的字好丑!!!!

政府应急平台之GIS一张图-flex/java

开发语言是flex.java,开发平台是myeclise.eclise,后台数据库是oracel或sqlserver,开发接口是arcgis api for flex,提供以下的功能: 1.视频监控: 显示视频监控的位置所在和信息 2.危险隐患管理: 显示危险隐患在地图的位置以及详细信息 3.事故后果模拟: 以某点为中心,假如这个点发生危险品泄漏事故为前提进行模拟,在界面输入一系列的参数值,比如危化品数量,种类,泄漏半径等等. 4.应急资源管理: 5.在线编辑: 利用SDE来实现地图在线编辑功能

安全生产应急救援指挥系统之GIS一张图-flex/java

开发语言是flex.java,开发平台是myeclise.eclise,后台数据库是oracel或sqlserver,开发接口是arcgis api for flex,提供以下的功能: 1.地图框选搜索: 这是空间查询,在地图上框选一定的范围,然后搜索出在这个范围之内的所有信息,搜索到的详细信息在列表框显示出来 2.路径导航: 提供两种不同的方式进行路径导航实现,分别是单击地图上的两个或者多个不同的地方,或者是直接输入两个不同的地名,然后会在地图上进行路径导航的详细信息 3.事故后果模拟: 以某

linux mysql密码破解一张图解释