对象转型及其在内存中的分析
来源:互联网 发布:淘宝差价链接怎么做 编辑:程序博客网 时间:2024/05/21 04:40
引入
Java基础对于Java的深入学习相当重要。对于Java基础中的东西,在做了很多项目后,再回顾,对其便理解的十有八九了,今天来说说转型。
性质
对象转型有这么几点性质:
1、一个基类的引用类型变量可以“指向”其子类的对象;
2、一个基类的引用不可以访问其子类对象新增加的成员(属性和方法);
3、可以使用引用变量instanceof类名来判断该引用类型变量所“指向”的对象是否属于该类或该类的子类;
4、子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)。
demo
我们从代码的角度来理解一下以上四句话:
class Animal {public String name;Animal(String name) {this.name=name;}}class Cat extends Animal {public String eyesColor;Cat(String n,String c) {super(n); eyesColor = c;}}class Dog extends Animal {public String furColor;Dog(String n,String c) {super(n); furColor = c;}}public class Test {public static void main(String args[]){Animal a = new Animal("name");Cat c = new Cat("catname","blue");Dog d = new Dog("dogname","black");System.out.println(a instanceof Animal); //trueSystem.out.println(c instanceof Animal); //trueSystem.out.println(d instanceof Animal); //trueSystem.out.println(a instanceof Cat); //falsea = new Dog("bigyellow","yellow");System.out.println(a.name); //bigyellowSystem.out.println(a.furname); //!errorSystem.out.println(a instanceof Animal);//trueSystem.out.println(a instanceof Dog); //trueDog d1 = (Dog)a; //要加强制转换符System.out.println(d1.furColor); //yellow}}
性质说明
性质1:
a = new Dog("bigyellow","yellow");
性质2:
System.out.println(a.furname); //!error性质3:
System.out.println(a instanceof Animal); //trueSystem.out.println(c instanceof Animal); //trueSystem.out.println(d instanceof Animal); //trueSystem.out.println(a instanceof Cat); //false性质4:
向上转型:
a = new Dog("bigyellow","yellow");向下转型:
Dog d1 = (Dog)a; //要加强制转换符
备注:左为堆,右为栈。
补充
在这里需要说明一点,向下转型的前提是要先向上转型,否则在执行的时候会出错(编译不会出错)。无论是访问属性还是方法输出的都是由实际指向的对象的属性和方法。
0 0
- 对象转型及其在内存中的分析
- php对象在内存中的存在形式分析
- 对象在内存中的状态
- 对象在内存中的分配
- 对象在内存中的状态
- 对象在内存中的存储
- 对象在内存中的状态
- 对象在内存中的存储
- Java学习系列(三)Java运算符、控制语句、数组及其在内存中的运行分析
- Java学习系列(三)Java运算符、控制语句、数组及其在内存中的运行分析
- 对象在内存中的存储机制
- PHP对象在内存中的分派
- HotSpot 对象在内存中的结构
- 输出JavaBean对象在内存中的大小
- PHP对象在内存中的分配
- PHP对象在内存中的分配
- PHP对象在内存中的分配
- PHP对象类型在内存中的分配
- 455. Assign Cookies*
- PoseNet运行详细过程
- 【JZOJ 4938】 序列 70分做法
- 算法提高 高精度加法
- 用原生js封装运动框架
- 对象转型及其在内存中的分析
- Java研发方向如何准备BAT技术面试(超级干货)
- pch文件的作用和配置
- 第五周总结
- Spring IOC的一些高级特性
- Linux下安装zookeeper
- 设备树学习之(八)eeprom
- Java根据对象的某个字段排序
- Windows下用EasyBCD引导Ubuntu硬盘安装双系统