Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的实类与表观类_Java - Fatal编程技术网

Java中的实类与表观类

Java中的实类与表观类,java,Java,嘿,大家好,我刚刚浏览了课程中的一些例子,遇到了这个让我难堪的问题。 我意识到 这个代码应该打印出来 “7 6 6 3 4 3” 但是为什么ab.y等于3呢?B类对象ab的“真实”类型不是吗? 这会让我相信ab.y是4?因为您直接访问字段,而不是通过getter方法 不能覆盖字段,只能覆盖方法 类B除了父类a中的字段外,还有一个字段y。这两个字段互不干扰,在编译时选择哪一个字段(由编译器已知的类型决定) 如果你说 class A { public static void main(String[

嘿,大家好,我刚刚浏览了课程中的一些例子,遇到了这个让我难堪的问题。
我意识到 这个代码应该打印出来 “7 6 6 3 4 3”

但是为什么ab.y等于3呢?B类对象ab的“真实”类型不是吗?
这会让我相信ab.y是4?

因为您直接访问字段,而不是通过getter方法

不能覆盖字段,只能覆盖方法

B
除了父类
a
中的字段外,还有一个字段
y
。这两个字段互不干扰,在编译时选择哪一个字段(由编译器已知的类型决定)

如果你说

class A { public static void main(String[] args) 
{ A a = new A(); 
  B b = new B(); 
  A ab = new B(); 
  System.out.format("%d %d %d %d %d %d", a.x, b.x, ab.x, a.y, b.y, ab.y); } 
  int x = 2; 
  int y = 3;
  A(int x) { this.x = x; } 
  A() { this(7); } } 

class B extends A { 
  int y = 4;
  B() { super(6); 
  }
然后

将编译以查看类
A
中声明的字段
y
。这不会在运行时调度到实际实例的类。静态方法也是如此

如果你这样做

  ab.y
然后在类
B
中获得字段

  ab.y
    B ab = new B();