深入理解向上转型与向下转型
向上转型比较容易理解 :父类引用变量指向其子类的对象。为什么父类引用变量可以指向其子类的对象呢。因为父类引用里面所有的基本基本属性和方法都可以在其指向的子类对象里面找到。反过来,如果是子类引用变量指向其父类的对象,那么子类引用变量里面的属性和基本方法在其父类对象里面根本找不到,这时候就会抛出java.lang.ClassCastException。这就说明 向上直接转型可以 ,但是向下直接转型不行。
那为什么向下转型前 先向上转型就可以了呢?简单的例子如下:
package com.down;
public class Animal {
public void eat(){
System.out.println("我是 animal eat 方法-----");
}
}
package com.down;
public class Cat extends Animal{
public void eat(){
System.out.println("我是一只 cat 的eat 方法----");
}
public void catprint(){
System.out.println("我是cat");
}
}
package com.down;
public class Test {
public static void main(String[] args) {
Animal a=new Cat();//向上转型
Cat cat=(Cat)a;
cat.catprint();
cat.eat();
/*Cat cat=(Cat) new Animal();
cat.catprint();*/
}
}
Animal 引用a 先指向一个Cat 对象,cat引用指向引用a 所指向的堆内存,也就是说引用cat此时和引用a 现在同时指向同一块堆内存。而这块堆内存里面存放的就是一个cat 对象 所以必然可以被引用cat 所指向。可以调用Cat里面所有独特的方法。
深入理解向上转型与向下转型相关推荐
- 为什么要向上转型与向下转型?意义在哪?(对于初学者理解使用)
理解向上转型和向下转型(对于初学者理解使用) 向上转型后 对象只能使用子类和父类共有的方法,子类的属性不能被使用,即属性不覆盖,覆盖的是方法 向下转型后,对象可以调用子类的所有方法和属性 向上转型的意 ...
- java理解向上转型和向下转型
在讲述向上转型和向下转型之前,我们先简单讲解下多态,如果后续看了有关多态的讲解还是不弄,只能自己上网去查阅和理解. 多态概念: 多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种 ...
- 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
–本文摘要– 1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者. 2.本文的内容摘要:讲述Java中的一 ...
- 【转】面向对象之多态(向上转型与向下转型)
转:https://blog.csdn.net/qq_31655965/article/details/54746235. 多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢 ...
- [JAVA]向上转型与向下转型
要理解多态性,首先要知道什么是"向上转型"."向下转型". 对象的多态性:父子类对象的转换 **向上转型:**子类对象变为父类对象,语法: 父类 父类对象 = ...
- Java中的向上转型及向下转型
我们都知道Java的三大特性:封装.继承.多态. Java中的向上转型及向下转型体现了Java中的继承性及多态性,所谓继承,不难理解,存在于子父类间,子类继承父类中不被私有化的属性和方法.而多态性,顾 ...
- 向上转型与向下转型(超详细)
本文利用代码例子解释向上转型与向下转型,文末有举例整合原代码. 首先,我们要知道:转型发生在继承后,也就是父类子类存在的前提下.其次,我们要清楚:向下转型的前提是已经发生了向上转型,向下转型是再次转回 ...
- Java 基础系列(十) --- 什么是向上转型和向下转型
1 向上转型 1.1 为何叫向上转型 在面向对象程序设计中,针对一些复杂的场景,我们通常画一个UML图来表示各个类之间的关系,通常父类画在子类的上方,因此我们就称之为"向上转型" ...
- 重新精读《Java 编程思想》系列之向上转型与向下转型
前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...
- Day11多态部分-6 【1.3 对象的向上转型和向下转型】
[1.3 对象的向上转型和向下转型] + - 向上转型 子类对象赋值给父类类型的引用时 会自动将子类对象对应的类型 提升为父类类型 语法: 父类类型 引用 = new 子类的构造方法(); 特点: 此 ...
最新文章
- NGUI: UIPanel控件
- php图片去噪,python 图片去噪的方法示例
- ERROR: ORA-01033: ORACLE initialization or shutdown in progress Oracle无法启动的解决
- HDU - 3533 Escape(预处理+A*)
- python3.5安装tensorflow_pip install tensorflowgpu在python3.5中的安装
- java mongodb 删除字段类型_Mongodb基本数据类型、常用命令之增加、更新、删除
- 使用Sci-kit学习和XGBoost进行多类别分类:使用Brainwave数据的案例研究
- Mybatis-config.xml配置文件详解
- JDBC知识 - 马士兵视频教程笔记
- 教程篇(7.0) 03. FortiClient EMS配置和管理 ❀ FortiClient EMS ❀ Fortinet 网络安全专家 NSE 5
- 1072 开学寄语 (20 分)
- mac 下载软件无法将程序拖移至app 出现错误
- 【20200129】win10 win7双系统安装成功后,win7提示未激活怎么办?
- python人脸识别门禁_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(一)
- html5导航栏文字间距,div字间距-div内文字之间间距设置方法
- 有关于毕业论文提纲范文
- 强大的UI组件集Telerik R3 2022支持.NET 7、全新的主题等
- 通过装疯卖傻 委曲求全
- 改变iOS系统自带返回按钮事件
- HDFS的特性,hdfs的安全模式,Hdfs的文件权限验证
热门文章
- ajaxToolkit发布之后出错!说未能加载文件或程序集!
- 是否所有二分类神经网络的准确率都能无限趋近100%?
- cmd安装pip_离线情况下怎么安装numpy、pandas和matplotlib?一步一步教你
- perl数组硬引用_perl引用和数组 - SibylY的个人空间 - OSCHINA - 中文开源技术交流社区...
- java类的定义的实例_Java类的定义与实例化
- LTE的随机接入过程解析
- 【DIY】(开发板不吃灰运动)CC3200LaunchPad改装红外温度计
- flock文件锁的学习和应用
- dubbo+zookeeper+dubbo管理控制台实践demo
- Powershell AWS 自动化管理 (6) - IAM