对象转型:

一个基类的引用类型变量可以指向其子类的对象(要求传个动物,传给狗是可以的,狗是动物)

一个基类的引用不可以访问其子类对象的新增成员(狗会游泳不代表所有的动物都会游泳,把狗当作动物来看时不可访问狗游泳方法)

子类对象可以当作基类的对象来使用称向上转型,反之称为向下转型。

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;

}

}main函数:

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(d instance of Animal); //true 狗是动物

System.out.println(a instanceof Dog); //False 动物是狗,显然逻辑错误,狗是动物,不能代表动物

a=new Dog("bigyellow","yellow"); //内存分析见下图1

System.out.println(a.name); //bigyellow

System.out.println(a.furname); //a是动物,new一个狗出来是把狗当作动物看,不可访问狗的特殊成员变量,上文第二条

System.out.println(a instanceof Dog); //true new出来的实际是Dog

//非要用a访问dog的成员变量,必须强制转换

Dog d1=(Dog)a; //内存分析见下图2

System.out.println(d1.furColor); //yellow

}

图1:狗当作普通animal,a只能看见animal共有的东西,看不见狗毛色属性

图2:强制转换,定义一个d1=a,在内存中分配一块区间d1指向与a指向的相同的对象,d1是Dog类型的,所以可以看见dog的所有属性

java转型 内存_java 对象转型内存分析相关推荐

  1. java怎么限制一个对象的内存_java对象的内存布局及创建过程

    一.对象的内存布局 对象的内存结构又可以被分为:对象头,实例数据,对象填充 对象头:对象头结构在32位JVM与64位JVM中的实现细节是不同的 32bit: 64bit: 实例数据:对象真正存储的有效 ...

  2. java对象内存模型_Java对象的内存模型

    众所周知,函数调用在内存中是通过压栈,退栈实现的,而Java的方法调用则是在JVM栈中通过栈帧实现的,且所有的Java对象都只在堆上分配内存.那么一个Java对象在堆内存里到底长啥样呢?实际上,当一个 ...

  3. java对象的内存分配_java对象在内存的分配问题

    今天看到一个不错的PPT:Build Memory-efficient Java Applications,开篇便提出了一个问题,在Hotspot JVM中,32位机器下,Integer对象的大小是i ...

  4. java对象的内存结构_Java对象在内存中的结构分析

    问题:在Hotspot JVM中,32位机器下,Integer对象的大小是int的几倍? HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头.实例数据和对齐填充,其中对象头又分为:Mark ...

  5. java基础学习总结——对象转型

    一.对象转型介绍 对象转型分为两种:一种叫向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型),另一种叫向下转型.转型的意思是:如把float类型转成int类型,把double类 ...

  6. java基础学习之对象转型

    对象转型(casting): 1)一个基类的引用类型变量可以指向其子类的对象 2)一个基类的引用不可以访问其子类对象新增加的成员(属性和方法) 3)可以使用引用变量instanceof类名,来判断该引 ...

  7. 动态加载laydate 失效_Java对象的内存布局+反射的原理+动态代理+ 并发和锁+文末彩蛋...

    # 一行代码是怎么运行的 首先,java代码会被编译成字节码,字节码就是java虚拟机定义的一种编码格式,需要java虚拟机才能够解析,java虚拟机需要将字节码转换成机器码才能在cpu上执行. 我们 ...

  8. 占内存少的java开发工具_Java所占内存中神奇的64MB

    一 前言 在生产环境,Java应用程序设置了最大JVM内存后,经常发现实际使用的内存,可能超过设置的JVM最大内存数jmap -heap pid 通过这个命令可以方便查看java的内存分配情况.一般情 ...

  9. java nio 堆外内存_Java堆外内存之突破JVM枷锁

    对于有Java开发经验的朋友都知道,Java中不需要手动的申请和释放内存,JVM会自动进行垃圾回收:而使用的内存是由JVM控制的. 那么,什么时机会进行垃圾回收,如何避免过度频繁的垃圾回收?如果JVM ...

最新文章

  1. 基于redis的cas集群配置(转)
  2. php+实现群发微信模板消息_php实现发送微信模板消息的方法,php信模板消息_PHP教程...
  3. LeetCode Number of Digit One(计算1的个数)
  4. PowerShell CLI 获取VM信息
  5. 【Spring Boot 分享】开源项目【8个】
  6. 图解全排列问题_一道笔试题(122345求有条件全排列)的两种做法
  7. inux读取ISO文件或是光驱的方法--挂载
  8. MySQL Group Replication-MGR集群简介
  9. 【mongoDB】测试使用gridfs,配置一个分片服务器集群
  10. Quartz(任务调度)- job串行避免死锁
  11. mysql isnull
  12. 使用 Composer 为 ThinkPHP(3.2.3)框架添加和管理组件
  13. Debug JDK源码没变量值怎么办?
  14. Java Timer
  15. java 启动resin,Resin 启动时报错!解决方法
  16. vue valley_12个无剧透的Stardew Valley秘诀和技巧,助您入门
  17. 黑客组织Anonymous(匿名者)
  18. RT-Thread Studio 项目实战教程 | 快速打造一个桌面mini网络时钟
  19. 动手做一个小机器人——语音控制篇
  20. MacOS 下 TeXstudio 深色背景主题设置

热门文章

  1. [原创]游戏合服时如何避免主键冲突
  2. java代码实现读写txt文件(txt文件转换成java文件)
  3. Android动画系列 - PropertyAnim 详解
  4. Android驱动开发第一章
  5. 闲来无事写写-Huffman树的生成过程
  6. [转载] 深层复制构造函数和浅层复制构造函数区别
  7. 【洛谷3157】[CQOI2011] 动态逆序对(CDQ分治)
  8. 数据结构之链表及实现
  9. java中的BigInteger
  10. UML类图几种关系的总结,泛化 = 实现 组合 聚合 关联 依赖