内存如何分配以及存储在哪里? :Javainheritance

您好我有一个特定的Javainheritance问题。 以下是我的代码

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(px); } } 

现在我的问题是在运行此程序时实际发生在幕后的情况。

  • 什么得到inheritance?
  • 在记忆位置的哪里?
  • 为什么第一个syso给出4,第二个给出5?(这个我能在某种程度上理解,但对上面两个的澄清将有助于更清楚地理解它)

请指导

什么得到inheritance?

所有public和protected方法都在子类中inheritance。 字段永远不会被inheritance。

在记忆位置的哪里?

我写了一篇关于Java中的对象创建过程的博客文章 。 我想你会更好地理解它。

为什么第一个syso给出4,第二个给出5?

始终基于声明的引用类型而不是实际的对象类型来解析字段访问。 因此, px将访问Parent的字段,因为声明的p类型是Parent 。 然而, ((Child)p).x将访问Child的字段,因为您已将类型的引用pChild ,现在所考虑的声明类型为Child

在Java中, 没有变量覆盖 ,只有方法覆盖

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

该行告诉Child一点p并得到那个x变量。

这一行, System.out.println(px); 告诉那个打印Parentx

这完全是关于Java inheritanceoverriding 。 父类中的method()将被子方法覆盖。

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

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

接下来就是Java多态性。

  ((Child) p).x // invoking object type, x=4 (object is child ) px // invoking reference type, x=5 (reference is parent) 

请参阅此链接和此 链接 。