`

Java Object

 
阅读更多
A a=new B();这一句代码分为三步:
1、A a:声明了一个A类型的变量a(a是放在栈的一个变量);
2、new B()创建一个B对象(当然会开辟一个内存空间存放在堆里);
3、=:把变量a指向堆空间的某一块;


A a=new B();只能是以下有两种情况:1.A是类,那么B类一定从A类继承,A是父类,B是子类,两个类之间是继承关系;2.A是接口,那么B类实现了A接口,A可以说是父接口,B是A的实现类,B也可以说是A的子类两者是实现关系。-------不论是以上那种,A a=new B(); 都叫做向上转型,或者说 父类引用指向子类对象。因为A与B之间,不论是实现关系还是继承关系,A都是B的父类,或父接口,其实从本质上讲,A就是B的父类,因为接口也是一个类,只不过是个抽象类,而且是一个特殊的抽象类,你就这么理解,就理解为父类和子类的关系就可以了。-------那么A a,这个a叫什么?叫做引用或者叫引用变量,a就是一个变量,那么为什么术语要叫引用呢?

因为A是引用数据类型,假如我给你举个例子:int i; 这个,int是基本数据类型,i是一个变量,是内存中的一块空间,说清楚点就是,内存的存储体本身就好像有好多个小格子一样,每一个小格子叫做一个存储单元,每一个存储单元能够存储8位,或者16...32位的01序列,也就是机器码,那么将来你为i赋值之后,这个值本身比如说8,那么8所对应的2进制数是1000 ,如果是8位那么就是00001000,就存储在那里了,也就是这个值就本身就存储在这个内存空间之上!-------但是如果是引用类型就不是了,A a=new B(); 不是说a这个变量的内部存储了对象B,不是的。Java中使用new关键字造出一个对象,这里就造出了一个B对象,这个对象位于内存的堆区,变量a和B对象可能不在同一个空间,堆内存有一个对象B,那么a里面的值是什么?

答案补充
a内部有一个值,值就是一个地址,这个地址是什么样的一个数你不用管,你就知道通过这个地址就可以准确的访问到B对象就可以了,因为内存中每一个存储单元都有一个编号,这是什么?这是指针!Java中到处都是指针,只不过Java把这一层屏蔽了!也就是a内部存储的这个地址并不是真正的物理地址,但是不管怎么说,我们通过a内部的这个地址都可以找到这个对象,它内部是什么算法,我就不知道了。

答案补充
所以,我们就说,a是一个引用,a这个引用指向了B对象,以后想通过B对象为你做什么事,你得通过a。那么a是什么类型的?a是A类型的,A是谁?A是B的父类,那么这就是父类引用指向子类对象,也叫向上转型(upcasting)

答案补充
向上转型会丢失其原有类型,是这样:如果A是一个类,子类B在构造的过程中会调用其基类构造方法,先把父类A给new出来,然后再把自己new出来,也就是说B类对象中有一个A类对象,B对象内部包含了一个A对象,B对象比A对象大。那么向上转型之后,你通过A类型的引用a,只能访问到B对象里面的A对象,也就是a只能看见A Object

答案补充
你这个问题太强悍!真的,其实就这么一个问题,能够写一本书,以下是假设A和B均是class的情况下的内存图,并且假设A a=new B();是写在main方法中的,自己看吧:

父类引用指向子类对象

A是B的父类,可以把A的子类对象赋值给父类引用。B会向上转型为A!所以引用a不能调用B中的方法,只能调用A中的方法。如果要用B的方法可以先向下转型再调用。如:(B)a.子类方法答案补充
不是(B)a.子类方法,是((B)a).子类方法
分享到:
评论

相关推荐

    Java Object实例代码

    Java Object 类是所有Java类的根,它定义了所有对象都具有的基本行为。在这个实例代码中,我们将深入探讨七个关键知识点,它们是Java Object的基础,对于理解和使用Java编程至关重要。 1. **对象**: 在Java中,...

    Java Object类认识

    在Java编程语言中,`Object`类是所有类的根,每个自定义类如果没有明确指定父类,都默认继承自`Object`。因此,对`Object`类的理解是每个Java开发者的基本功。本文将深入探讨`Object`类,以及其核心方法`equals()`与...

    1.javaObject类.zip

    1.javaObject类.zip1.javaObject类.zip1.javaObject类.zip1.javaObject类.zip1.javaObject类.zip1.javaObject类.zip1.javaObject类.zip1.javaObject类.zip1.javaObject类.zip1.javaObject类.zip1.javaObject类.zip1....

    java Object转换为json

    此下载包含 POJO 中使用 json格式传递到页面所需要的包 POJO 中Object/Array/List/Map转换为json格式的语法 PS:下载了可以保证json方面完全没有问题的使用。 thia's all!!!

    Java Object 类高难度进阶版面试题集锦解析Java Object类高难度面试题及答案解析

    Java Object 类是所有Java类的根类,每个自定义的Java类都会无意识或有意识地继承Object类。Object类提供了几个核心的方法,这些方法在处理对象时非常关键,包括equals()、hashCode()、toString()、clone()、...

    kryo实例,对java object的序列化和反序列化

    kryo中间件实例,内容:使用kryo使java对象object序列化成字符串,并使之反序列化为对象。 一个完整的工程,可使用eclipse导入,可运行DemoMain查看结果,有注释 资源包括依赖的kryo-2.24.0.jar、minlog-1.2.jar、...

    javaobject.rar

    javaobject.rar

    JAVA OBJECT 保存到指定的XML文件中

    把JAVA对象保存到XML文件中,已经读取,其中所有对象放在一个MAP中,

    04JavaObject对象ppt

    04JavaObject对象ppt

    JOL(JAVA OBJECT LAYOUT)工具0.9.zip

    Java对象布局(JOL,Java Object Layout)是一个强大的工具,用于深入理解Java对象在内存中的布局情况。这个工具可以帮助开发者优化内存使用,提高程序性能,尤其是在处理大量对象或高并发场景时。JOL 0.9是其一个...

    Java Object-Oriented Programming.ppt

    Java Object-Oriented Programming.ppt

    Java Object类详解_动力节点Java学院整理

    Java Object类是所有Java类的根,它定义了一些基本的方法,这些方法在所有类中都可用。以下是Object类中的其他关键方法: 4. `toString()`: 这个方法返回一个表示当前对象的字符串。默认的实现返回类名加@加十六...

    Java Object 序列化的基准测试(V1)

    Java Object 序列化的基准测试(V1)。示例数据结构过于简单,测试程序没有概括序列化系统以公平地评估每个序列化系统,仅涉及少数序列化系统,测试程序无法扩展以涉及更多的序列化系统,它提供了构建自己的 Java ...

    使用XStream, java Object 与xml之间的转换,以及写入SD卡

    在Java开发中,数据序列化和反序列化是常见的需求,尤其在持久化存储或网络传输时。XStream是一款强大的库,它使得Java对象与XML之间的转换变得简单易行。本篇文章将深入探讨如何利用XStream进行Java对象到XML的转换...

    Java Object Relation-开源

    Java Object Relation(JOR)是一个基于Java的开源对象关系映射(ORM)框架,它简化了在Java应用程序中处理关系数据库的工作。ORM技术的核心目标是通过将数据库中的表映射为Java对象,以及将对象的数据映射到表的...

    java object

    java hashcode equals 方法的作用 面向对象下object类中的方法

    object转化为时间类型

    ### 在C#中将Object转换为时间类型 在C#编程语言中,经常需要处理不同类型的数据,尤其是在处理日期和时间时。本篇文章将详细介绍如何将一个`object`类型的变量安全地转换为`DateTime`类型,并解释相关的代码实现...

    ObjectToMapUtil.java(Object对象转Map)

    Java代码Object对象转Map

    Java Object类的常用方法详解与应用实践

    Object类的方法是Java编程的基础,它们为所有对象提供了基本的行为。掌握这些方法的用法和最佳实践,可以帮助我们编写出更加健壮、高效和可维护的Java代码。通过重写equals、hashCode和toString方法,我们可以确保...

    对象 Object 转换工具

    使用此工具类,对于Object和byte[] 数组, 16进制和String之间的转换

Global site tag (gtag.js) - Google Analytics