当前位置: 首页 > 知识库问答 >
问题:

内存是如何分配的,存储在哪里Java继承

梁浩涆
2023-03-14

大家好,我有一个关于Java继承的具体问题。以下是我的代码

class Parent{
    int x = 5;
    public void method(){
        System.out.println("Parent"+ x);
    }
}
public class Child extends Parent{
    int x = 4;
    public void method(){
        System.out.println("Child"+ x);
    }
    public static void main(String[] args){
            Parent p = new Child();
            System.out.println(((Child) p).x);
            System.out.println(p.x);
        }
}

现在我的问题是,运行这个程序时,幕后到底发生了什么。

  • 什么会遗传?
  • 内存位置在哪里?
  • 为什么第一个syso给4,第二个给5?(这一点我能在一定程度上理解,但澄清上述两个将有助于更清楚地理解它)

请引导

共有3个答案

卢德惠
2023-03-14
匿名用户

这一切都是关于Java继承重写<父类中的code>method()将被子类的方法覆盖。

System.out.println(((Child) p).x);// here you are invoking child 

然后你会得到孩子的属性。

下一个是关于Java多态性。

 ((Child) p).x // invoking object type, x=4 (object is child ) 

  p.x  // invoking reference type, x=5 (reference is parent)

请参考此链接和此链接。

章城
2023-03-14

什么会遗传?

所有公共和受保护的方法都在子类中继承。田地永远不会被继承。

内存位置在哪里?

我在Java写了一篇关于对象创建过程的博客文章。我想从中你会更明白。

为什么第一个系统给4,第二个系统给5?

字段访问总是根据引用的声明类型而不是实际的对象类型来解决。因此,p. x将访问Pental字段,因为p的声明类型是Pental。然而,((子)p). x将访问字段,因为您已经将引用p转换为,现在考虑的声明类型是

松亦
2023-03-14

在Java中,没有变量重写,只有方法重写。

    System.out.println(((Child) p).x);

这一行告诉点p子对象,然后得到x变量。

行,系统。出来println(p.x) 告诉父母的打印x

 类似资料:
  • JDK版本是热点8U_45 我研究了java进程的本地内存。本机内存甚至比堆占用更多的空间。然而,有许多本机内存块,这使我感到困惑。pmap-x的结果,例如: 有许多占地约64m的街区。 那么如何跟踪这些内存块的来源呢?

  • 问题内容: 我正在尝试将非默认URL设置为安装Jenkins的木偶脚本的一部分。我知道如何通过Web UI编辑值,但似乎找不到实际存储值的位置。我已经浏览了jenkins_home文件夹和apache,但尚未找到它。 问题答案: 它将其存储在一个不太可能的位置:在Jenkins主文件夹中。

  • 问题内容: Oracle数据库中存储的已加载Java类的Java字节码在哪里?具体来说,是否有一个视图或表可用于获取Oracle中Java类模式对象的原始字节? 问题答案: 如果使用CREATE JAVA SOURCE命令将Java Source加载到Oracle数据库中,则可以转到数据字典视图USER_SOURCE并找到您的Java Source。 如果需要显示它或其他内容,可以签出DBMS_J

  • 我知道这是自动完成的——访问数据的频率越高,它存储的处理器就越近。但我能用Java语法影响它们的位置吗?按照我的理解,Volatile将数据放在三级缓存或RAM中,因为所有线程都可以看到它,对吗?

  • 本文向大家介绍对象,方法和变量在Java的内存中存储在哪里?,包括了对象,方法和变量在Java的内存中存储在哪里?的使用技巧和注意事项,需要的朋友参考一下 有五个主要内存区域,用于各种Java元素。以下是相同的列表。 类区域-该区域包含类的静态成员。 方法区域-此区域包含方法定义和可执行代码。 堆区域-该区域包含动态分配/取消分配的对象。如果某个对象不再被任何实时引用引用,则将其释放。 堆栈区域-

  • 我正在学习虚拟内存和自由空间管理。 我知道我们使用malloc分配的指针将请求堆中的一块内存。但是当我们调用malloc()系统调用时,它将返回一个整数作为专用内存块的地址,但是这个地址本身将存储在哪里呢? 假设 返回我的4008地址。它从4008到4022开始。这个块在堆中。但是4008本身在哪里? 它存储在堆栈中吗?