前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【编程基础】如何理解java中的多态

【编程基础】如何理解java中的多态

作者头像
程序员互动联盟
发布2018-03-14 15:21:03
7850
发布2018-03-14 15:21:03
举报
文章被收录于专栏:程序员互动联盟

大家都知道Java面向对象有几大特征:抽象、封装、继承和多态,Java的这些特性让Java变得很强大,可以很轻松的胜任比较复杂的项目开发。今天重点给大家说说多态这个特性。

多态总结起来发生的场景就是两类:

1、对象运行时确定是子类还是父类;

2、方法运行时确定调用同名的哪个方法;

也就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

向上转型规则:

在用一个子类型复制给父类型时,指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。

下面来看一个例子:

public class Animal { public void move(String string) { System.out.println(string + " is a Animal ,is moving! "); cry(); }; public void cry() { System.out.println("Animal is cry!"); } } public class Bird extends Animal { @Override public void cry() { System.out.println("Bird is crying!"); } } public class Main { public static void main(String[] args) { Animal animal = new Bird(); animal.move("animal"); } }

运行结果:

animal is a Animal ,is moving! Bird is crying!

代码分析:

Bird继承自Animal,Bird重写了父类的cry函数,move函数在父类型Animal中进行了定义。

Animal animal = new Bird();

创建一个Bird()实例,指向父类型Animal,但是它真实的类型是一个Bird类型,只是暂时隐藏了父类型中没有的方法和属性,当成一个父类型来用。

animal.move("animal");

子类中没有重写move函数,所以调用的是父类的move函数,在move函数调用了cry函数,这个函数因为在子类Bird中进行了重写,并且animal是一个Bird类型的Animal,所以会调用到子类Bird的cry函数。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员互动联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档