JAVA面向对象的多态性
什么是多态?简而言之就是相同的行为,不同的实现。 而多态也分为静态多态(重载)、动态多态(重写)和动态绑定。
静态动态,实际就是指的重载的概念,是系统在编译时,就能知晓该具体调用哪个方法。动态多态指在运行中才能动态的确定方法所指对象,动态多态的实现方式是重写父类中同名成员方法,其调用规则是依据对象在实例化时而非定义时的类型,相应的调用对应类中的同名成员方法,它需要通过动态绑定和重写机制来实现。
由类的继承性我们知道类之间的继承关系使子类具有父类的所有变量和方法,父类所具有的方法也可以在它所有子类中使用,发给父类的消息也可以发送给子类 又可以推出=> 子类的对象也是父类的对象=>子类的对象既可以做本身的类型,也可以做父类的类型。我们把这个称之为向上转型技术。
向上转型技术:一个父类的引用变量可以指向不同的子类对象,或者说一个子类对象可以被当做一个父类类型。在操作中我们可以使用instanceof来判断运行时对象的真正类型。 格式:变量名 instanceof 引用类名。(返回值boolean型)。
动态邦定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而实现多态性。
文字描述通常是不宜理解的,在程序中的思路如下例:
/**
* 定义一个父类
*/
public Class Parents {
public void print() {
System.out.println(“parents”);
}
}
/**
* 定义两个子类
*/
public Class Father extends Parents {
public void print() {
System.out.println(“father”);
}
}
public Class Mother extends Parents {
public void print() {
System.out.println(“mother”);
}
}
/**
* 测试输出结果的类
*/
public Class Test {
public void find(Parents p) {
p.print();
}
public static void main(String[] args) {
Test t = new Test();
Father f = new Father();
Mother m = new Mother();
t.find(f);
t.find(m);
}
}
最后的输出结果分别是father和mother,将子类的引用传给父类的引用,然后调用重写方法,父类的引用之所以能够找到应该调用那个子类的方法,就是因为程序在运行时进行了绑定。
JAVA面向对象的多态性的更多相关文章
- Java面向对象_多态性、instanceof关键字
一.多态 分类:方法的重载与重写:对象的多态性 对象的多态性:向上转型:将子类实例转为父类实例 格式:父类 父类对象=子类实例;是自动转换 向下转型:将父类实例转为子类实例 格式:子类 子类对 ...
- Java面向对象设计主要有三大特征:封装性、继承性和多态性
Java面向对象设计主要有三大特征:封装性.继承性和多态性 一 封装性 1.1 概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访 ...
- Java面向对象-对象的多态性
Java面向对象-对象的多态性 Java中的多态性表现: 1,方法的重载和重写(覆盖): 2,可以用父类的引用指向子类的具体实现,而且可以随时更换为其他子类的具体实现: 我们先搞个父类Animal: ...
- JAVA面向对象-多态的理解
面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- Java面向对象的多态
Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...
- Java面向对象的三大特征
Java面向对象的三大特征 java面向对象的三大特征:“封装.继承.多态”.更多Java技术知识,请登陆疯狂软件教育官网.微信搜索微信号:疯狂软件,参加2015年优惠活动,有机会获得优惠劵和代金劵. ...
- Java面向对象详解
Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...
- Java 面向对象(转)
转自:http://blog.sina.com.cn/s/blog_83c5190f01010ate.html 1.我们可以把JAVA中的类分为以下三种: 类:使用class定义且不含有抽象方法的类. ...
随机推荐
- R语言-来自拍拍贷的数据探索
案例分析:拍拍贷是中国的一家在线借贷平台,网站撮合了一些有闲钱的人和一些急用钱的人.用户若有贷款需求,可在网站上选择借款金额. 本项目拟通过该数据集的探索,结合自己的理解进行分析,最终目的的是初步预测 ...
- 【BZOJ4653】【NOI2016】区间(线段树)
[BZOJ4653][NOI2016]区间(线段树) 题面 BZOJ 题解 \(NOI\)良心送分题?? 既然是最大长度减去最小长度 莫名想到那道反复减边求最小生成树 从而求出最小的比值 所以这题的套 ...
- 【BZOJ4827】【HNOI2017】礼物(FFT)
[BZOJ4827][HNOI2017]礼物(FFT) 题面 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每 ...
- xctf的一道题目(77777)
这次比赛我没有参加,这是结束之后才做的题目 题目链接http://47.97.168.223:23333 根据题目信息,我们要update那个points值,那就是有很大可能这道题目是一个sql注入的 ...
- Navicat for MySQL下载、安装与破解
一:下载Navicat for MySQL 进入 Navicat for MySQL下载 ,根据需要选择下载的版本,我选择的是Windows 64bit,任意选择一个镜像地址下载. 二:安装Navic ...
- Asp.Net Boilerplate Project (ABP) 视频教程
转自youtube:https://www.youtube.com/playlist?list=PLlu_PkRHZce-EtuVO1zVQpNgrB7Hiu1vu 虽然全部都没有声音,但看操作还是可 ...
- PHP方法实现1-9数列中添加‘+’,‘-’或'',使和为100,并输出数列
今天收到个题目:编写一个在1,2,3,4,5,6,7,8,9(顺序不能变)数字之间插入 + 或- 或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性.例如 1+2+34-5+67-8+9 ...
- Java 英文面试题
1. Q: What is HashMap and Map?A: Map is Interface and Hashmap is class that implements that. 2. Q: D ...
- 1-2 Spring 的基本使用
1.Spring容器的配置文件applicationContext.xml的引入 名称可以自己定义 <?xml version="1.0" encoding="UT ...
- 常用css样式颜色值: 64位真彩和256位值
1. background-color: #eee; 2. background-color: #797979; 3. background-color: #007aff; 继续更新中