多态的转型和案例--java进阶day02
1.多态的转型
1.向上转型
我们之前学的多态创建对象,使用的都是向上转型,父类引用指向子类(赋值方式则是从子到父),f拿到子类的地址,就能访问子类的堆内存
2.向下转型
和向上转型相反,子类引用指向父类(赋值是从父到子),f现在记录着地址,这时再将其地址转交给子类对象,如下图,黑线的指向就像Zi z=new Zi(),这不就相当于创建子类对象,那想用什么成员,就可以用了
需要注意的点是,向下转型需要强制转换,因为父类比子类大(父亲肯定比儿子更猛)
2.多态的转型问题
了解了多态的转型后,我们就可以解决上次的问题了,现在国外类里有一个自己的方法check(),使用多态创建对象,编译发现接口中不存在该方法,所以编译报错
这时我们使用向下转型,将接口拿到的权限再转交给国外类,再用重新获得权限的实现类调用自己的方法即可
虽然解决了问题,但我们的代码目前存在安全隐患,如下图,当我们输入1,接口指向国内类时
这个问题叫做类型转换异常
在引用数据类型的强转中(和基本数据类型无关),接口指向国内类对象,然后又使用了向下转型,接口又被转交给了国外类,实际类型是国内类,目标类型又是国外类,所以造成了错误
说白点就是只能接口和对应的实现类进行转型,不能乱转
3.instanceof关键字
对于类型转换异常的解决方法,就是通过instanceof关键字来解决
我们只需要使用if来进行小的判断,看看接口对象是不是国外类型,是,就进行向下转型,不是则无需进行向下转型,也就不会出现刚才的问题
4.案例
思路:不管是什么支付方法,肯定会有支付,所以我们先写一个接口用于支付,再对应三种支付方式写三种类,然后将这些类实现接口,最后用多态和switch分别指向不同的实现类,调用其方法即可
准备好接口和实现类
进行业务
多态的转型和案例--java进阶day02的更多相关文章
- Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案
多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...
- Java面向对象之多态(来源于身边的案例)
2019年1月3日 星期四 Java面向对象之多态(来源于身边的案例) 1. 为什么要用多态? 1.1 多态是面向对象的三大特性之一 1.2 多态是基于接口设计的模型 1.3 多态具有横向扩展特性 1 ...
- Java 进阶 hello world! - 中级程序员之路
Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...
- Java进阶(七)正确理解Thread Local的原理与适用场景
原创文章,始自发作者个人博客,转载请务必将下面这段话置于文章开头处(保留超链接). 本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ Th ...
- Java进阶之路
Java进阶之路——从初级程序员到架构师,从小工到专家. 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序 ...
- Java进阶资料汇总
Java经过将近20年的发展壮大,框架体系已经丰满俱全:从前端到后台到数据库,从智能终端到大数据都能看到Java的身影,个人感觉做后台进要求越来越高,越来越难. 为什么现在Java程序员越来越难做,一 ...
- Java进阶5 面向对象的陷阱
Java进阶5 面向对象的陷阱 20131103 Java是一门纯粹面向对象的编程语言,Java面向对象是基础,而且面向对象的基本语法非常多,非常的细,需要程序员经过长时间的学习才可以掌握.本章重点介 ...
- Java进阶2 数组内存和对象的内存管理知识
Java进阶2 数组内存和对象的内存管理知识 20131028 前言: 在面试的时候,如果是Java的编程语言,也许你认为没有什么可以问的,只能够说明你对于Java了解的太浅了,几乎就是两个星期的节奏 ...
- Java进阶知识点: 枚举值
Java进阶知识点1:白捡的扩展性 - 枚举值也是对象 一.背景 枚举经常被大家用来储存一组有限个数的候选常量.比如下面定义了一组常见数据库类型: public enum DatabaseType ...
- java进阶视频分享
更多资源和教程请关注公众号:非科班的科班. 如果觉得我写的还可以请给个赞,谢谢大家,你的鼓励是我创作的动力 课程目录介绍 01.开班仪式02.并发编程专题之多线程基础03.并发编程专题之Java内存模 ...
随机推荐
- 开源商业化 Sealos 如何做到月入 160万
去年我写了一篇也是讲开源商业化的文章,当时是月入 30 万,一年过去了,我们整整涨了 5 倍多.本文理论结合实践,比较干货,希望对大家有帮助. 我们的现状,谁在给我们付钱 第一,开发者,我们已经近 2 ...
- 【Git】fatal: refusing to merge unrelated histories
git pull origin master --allow-unrelated-histories
- IntelliJ IDEA2020永久激活破解教程(无限试用)
IntelliJ IDEA2020激活破解教程(无限试用) 鉴于想拥有一个十分舒适的编程环境,我特意将自己的电脑运行内存从4G扩展到12G,加装一个256G的固态作为C盘,并且将系统升级为Window ...
- VBA 解析 json
Sub Macro1() Debug.Print "999" Dim FilePath, strData FilePath = "C:\Git\Test\JenProje ...
- SpringCloud (五) - 云服务器Centos7.6,安装JDK,Maven,Mysql,Redis
1.购买云服务器 购买地址:https://cloud.tencent.com/act/pro/2022double11_warmup 后面的环境都是基于此环境Centos7.6: 2.安装 Secu ...
- javaIO类--File类
-------------------- File类 是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包 ...
- .NET 9 new features-C#13新的锁类型和语义
C# 13 中,引入了新的锁类型和语义,主要用于增强多线程编程中的同步机制. 传统上,C# 使用 lock 关键字与任意的 object 实例配合,实现线程间的互斥访问.然而,这种方式可能存在性能瓶颈 ...
- linux shell 脚本调试技巧
本文分享自天翼云开发者社区<linux shell 脚本调试技巧>,作者:g****n 1.bash -x 加脚本 这是最常用的调试手段,终端会打印出,脚本执行过程中的每一个命令. a. ...
- tomcat 自启动脚本(守护模式)
tomcat以daemon模式启动 跳转到最新脚本 1.jsvc简介 Jsvc 是专为 Java 应用程序开发的一个工具包,其目标是把 Java 应用程序的普通运行转换为可以配置某个普通用户以 Uni ...
- DP(优化)
史不分好坏.是史就应该冲进. 细节见其他题解. P10538 首先建出部分分 sub1 的图,发现是 DAG,于是设点为状态,即即将乘坐 \(j\) 车的最小代价 \(f_j\).这样的转移就是枚举上 ...