Java-类与对象-多态
Java类与对象-多态
多态:类与对象三大特征之一
什么是多态?
同类型的对象,执行同一个行为,会表现出不同的行为特征。
多态的形式
1、父类类型 对象名称 = new 子类构造器();
2、接口 对象名称 = new 实现类构造器();
以下为例:
/*
* 此例中
* Animal为抽象父类 有一个抽象方法shout()
* Dog为继承Animal的一个子类 重写了shout()
并有独有方法 watchDoor()
Cat为继承Animal的另一个子类 重写了shout()
并有独有方法 catWalk()
**/
Animal a = new Dog(); // 这里a就是一个形式的多态
多态成员的访问特点
方法调用:编译时看父类是否有该方法,运行时访问子类中的此方法。
编译看‘左边‘,运行看’右边‘。
变量调用:编译时看父类是否有该变量,运行时也访问父类中的此变量。
编译看‘左边‘,运行也看’左边‘。
==> 多态侧重行为的多态(变量(属性)没有多态)。
多态的优势
1、便于代码的扩展和维护。
2、定义方法(函数)时,使用父类型作为参数,该方法就可以接收这个父类的一切子类对象,使操作更加便捷。
以下为例:
/*
* 此例中
* Animal为抽象父类 有一个抽象方法shout()
* Dog为继承Animal的一个子类 重写了shout()
* Cat为继承Animal的另一个子类 重写了shout()
**/
public static void main(String[] args) {
Dog d = new Dog();
Cat c = new Cat();
compete(d);
compete(c);
}
public static void compete(Animal a) { // 传参时形参可以是父类
a.shout();
}
多态存在的问题
多态不能使用子类的独有功能。
在多态下想要使用子类的独有方法怎么办呢?
这就引入了多态中的类型转换,将父类型强制类型转换成子类后,即可实现该目的。
多态中的类型转换
1、自动类型转换 (子类到父类)
2、强制类型转换 (父类到子类) ==> 解决了多态中存在的问题,强转后可以调用子类的独有功能
子类名称 子类对象名 = (子类名称) 多态对象;
这种操作可能由于编写者的疏忽并且编译器编译不会提示错误,若将一个非本子类的多态对象赋给该子类,运行时便会报错。
为了解决这一问题,通常在强制转换之前先用instanceof判断是否正确。
以下为例:
/*
* 此例中
* Animal为抽象父类 有一个抽象方法shout()
* Dog为继承Animal的一个子类 重写了shout()
并有独有方法 watchDoor()
Cat为继承Animal的另一个子类 重写了shout()
并有独有方法 catWalk()
**/
Animal d = new Dog(); // 构建多态对象d
Animal c = new Cat(); // 构建多态对象c
Cat c2 = (Cat) c; // 将c有Animal类强制转换成Cat类,使其可以调用Cat的独有方法
c.catwalk(); // 错,多态不能使用子类的独有功能。
c2.catwalk(); // 对。
if (c instanceof Cat) { // 为避免错误最好先判断其正确性
Cat c2 = (Cat) c;
c2.catwalk();
}
以上就是java中类与对象的一个特征,多态。
Java-类与对象-多态的更多相关文章
- Java类和对象初始化
类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ...
- java类和对象之间的差
java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...
- 危险代码:如何使用Unsafe操作内存中的Java类和对象
危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...
- [Java初探08]__简单学习Java类和对象
前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...
- java类和对象
类是对象的抽象 对象是类的一个实例类 对象 = new 类();拿对象可以操作这个类里的方法 java类与对象的区别是个老生常谈的问题,刚开始学java的时候就开始接触类和对象,今天来总结一下他们之间 ...
- JAVA类与对象(九)------多态
多态是同一个行为具有多个不同表现形式或形态的能力.多态性是对象多种表现形式的体现. 多态存在的三个必要条件: 继承 重写 父类引用指向子类对象 例:Parent p = new Child(); 当使 ...
- Java——类和对象
前言 Java语言是一种面向对象的语言.面向对象的思想是在七十年代的时候由IBM的SmallTalk语言最先推广.那什么是面向对象呢?面向对象指的是一种开发模式.早期的计算机编程使用的是面向过程的 ...
- JAVA类和对象创建
面向对象 学习目标: 理解面向对象的编程思想 理解类与对象的关系 如何创建类与对象 方法重载 一:什么是面向对象编程(OOP) 面向对象编程(Object Oriented Programming,O ...
- 解析Java类和对象的初始化过程
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...
- JAVA类和对象课后作业
1.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询"你已经创建了多少个对象?" 代码: //显示类 //YiMingLai 2 ...
随机推荐
- 2.SSH协议常见问题排错
一.SSH登录linux服务器密码验证很慢 现象:ssh登录服务器后,输入密码时,验证要等10秒左右,很慢.登录上去后速度正常,这种情况主要有两种可能的原因: 1. DNS反向解析的问题 OpenSS ...
- 操作系统深度研究(75页PPT)
上一篇:命令行版的斗地主你玩过没? 内容覆盖操作系统基本概念.分类.关键技术,体系架构,发展历程和主流国产操作系统厂商分析. 文中报告节选自兴业证券经济与金融研究院已公开发布研究报告,具体报告内容及相 ...
- drf-Serializers
What is serializers? serializers主要作用是将原生的Python数据类型(如 model querysets )转换为web中通用的JSON,XML或其他内容类型. DR ...
- vuepress搭建UI组件库文档踩坑篇
为了实现组件效果预览及代码展示可折叠功能,使用了插件vuepress-plugin-demo-container 相关配置可参考官网说明文档 第一步 安装插件 npm i - D vuepress-p ...
- 扩展.Net Core Identity Server 授权方式,实现 手机号+ 验证码 登录
背景 国内来讲,注册/登录流程都是尽可能的简单,注册流程复杂,容易流失客户.手机号 + 短信验证码的方式非常普遍:但是框架默认并没有类似的功能,需要我们自己进行扩展. 思路 验证登录手机号为注册用户, ...
- git提交时写message的规范
message规范 angular示例 commit message(提交说明) git commit -m "写一行提交说明" # 跳出文本编辑器,写多行 git commit ...
- Python常用标准库(pickle序列化和JSON序列化)
常用的标准库 序列化模块 import pickle 序列化和反序列化 把不能直接存储的数据变得可存储,这个过程叫做序列化.把文件中的数据拿出来,回复称原来的数据类型,这个过程叫做反序列化. 在文件中 ...
- Mac下最好用的SSH连接客户端 (Termius)
Termius是微软的一款SSH终端工具,它支持多平台.而且操作界面十分ha好看且简洁,今天分享给大家️ 软件下载 关注下方公众号,回复termius获取下载地址 软件功能介绍 Termius M ...
- js 定时器 Timer
1 /* Timer 定时器 2 3 parameter: 4 func: Function; //定时器运行时的回调; 默认 null 5 speed: Number; //延迟多少毫秒执行一次 f ...
- ACM 刷题记录
HDU Multi-University Training Contest 题目来源 题目 知识点 时间复杂度 完成情况 2019 Contest8 A Acesrc and Cube Hyperne ...