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