首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的实类与表观类

Java中的实类与表观类
EN

Stack Overflow用户
提问于 2010-09-28 09:49:46
回答 1查看 1.5K关注 0票数 6
代码语言:javascript
复制
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); 
  }

大家好,我只是在浏览我的课程中的一些例子,遇到了这个难住我的问题。

我意识到这段代码应该打印出"7 6 6 3 4 3“

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-28 09:56:26

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

您不能重写字段,只能重写方法

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

如果你说

代码语言:javascript
复制
   A ab = new B(); 

然后

代码语言:javascript
复制
  ab.y

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

如果你这样做了

代码语言:javascript
复制
    B ab = new B();

然后在B类中获取该字段。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3809139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档