【J2SE快速进阶】——向上转型及其内存分析
来源:互联网 发布:闹钟提醒软件 编辑:程序博客网 时间:2024/05/15 00:13
还记得刚通过C#学习面向对象时,接触了对象转型,最近学习Java,又遇到了。这里再用Java分析一下对象的转型,并适当利用内存分析来加深理解。
向上转型
我们都知道,狗是动物中的一种,那么如果现在有一个Dog类和Animal类,那么他们的关系就是Dog类继承Animal类。
我们经常说,狗是动物,实际上“狗是动物”这句话就是向上转型的一个例子,即把狗(子类)当做动物(父类)来看待。用一句话来总结,向上转型就是父类的引用指向子类的实例。
实例说明&&内存分析
下面就用一个简单的小例子加上内存分析来理解向上转型。
定义父类Animal和子类Dog
class Animal{public String name;Animal(String name){this.name=name;}public void SetName(String name){this.name=name;}} class Cat extends Animal{ public String furcolor;Cat(String name,String furcolor){ super(name);this.furcolor=furcolor;}public void SetFurcolor(String color){this.furcolor=color;}}定义UpCastingTest类
public class UpCastingTest {public static void main(String[] args) {Animal a=new Cat("叮当猫","蓝色");a.SetName("大脸猫");System.out.println(a.name);//a.SetFurcolor("黄色");//System.out.println(a.furcolor);}}在main方法中虽然定义了Animal类型的变量a,但它指向的是一个Cat类型的实例,如下图:
在上面的内存图中,实例化Dog类时,在堆内存中的Dog类实例中会包含它的父类(即上图中黄色部分),下面的部分是只属于自己的,栈内存中的引用a虽然指向堆内存中的Dog类实例,但它毕竟是一个Animal类型的引用,所以在Dog实例中,除了继承自Animal的那一部分,其余的部分它并看不到。因此我们可以看做a实质上指向的是堆内存中属于Animal类的那一部分(即黄色的那一部分)。所以在main方法中,如果执行注释掉的那两句代码 “a.SetFurcolor("黄色");” 或者 “System.out.println(a.furcolor);” 时就会报错。
因此,当父类的引用指向子类对象的时候,父类的引用只可以访问子类继承于父类的那一部分属性和方法以及子类重写的父类的方法。
- 【J2SE快速进阶】——向上转型及其内存分析
- 【J2SE快速进阶】——数组(及其内存分析 )
- 【J2SE快速进阶】——Java内存分析
- 【J2SE快速进阶】——递归算法
- C#——向上转型
- 【J2SE快速进阶】——IO流简介
- 【J2SE快速进阶】——Java多线程机制
- 【J2SE快速进阶】——多线程之synchronized
- J2SE快速进阶——Java多线程机制
- 向上转型和向下转型内存图解
- Java多态——向上转型与向下转型
- Java基础——向上转型、向下转型
- java 单例设计模式与单例内存分析,向上转型注意事项
- 【J2SE快速进阶】——Java中的equals和==的区别
- 【J2SE快速进阶】——IO流的四个基本抽象类InputStream、OutputStream、Reader、Writer
- 【J2SE快速进阶】——Socket编程入门(TCP/UDP)
- 【J2SE】内存分析
- 【J2SE】内存分析
- 接口--interface
- JAVA菜鸟入门篇 - 继承VS组合、final关键字 (十六)
- HDU 1312 -- Red and Black(dfs)
- maven安装问题
- 普通平衡树 离散化
- 【J2SE快速进阶】——向上转型及其内存分析
- Ubuntu通过有线路由器上网
- Qt元对象表机制与MFC消息映射机制
- Vs2013在Linux开发中的应用(36):Milestone-0.1.0
- [数学][第二阶段-简单数学题][HDOJ-2057]进制转换
- NSURLSession 教程
- Pat(Advanced Level)Practice--1084(Broken Keyboard)
- 矩阵模板类
- Java.lang.ClassNotFound Instrumentation 测试异常