Java继承中的“this”关键字如何工作?

2024-01-13

在下面的代码片段中,结果确实令人困惑。

public class TestInheritance {
    public static void main(String[] args) {
        new Son();
        /*
        Father father = new Son();
        System.out.println(father); //[1]I know the result is "I'm Son" here
        */
    }
}

class Father {
    public String x = "Father";

    @Override
    public String toString() {
       return "I'm Father";
    }

    public Father() {
        System.out.println(this);//[2]It is called in Father constructor
        System.out.println(this.x);
    }
}

class Son extends Father {
    public String x = "Son";

    @Override
    public String toString() {
        return "I'm Son";
    }
}

结果是

I'm Son
Father

为什么在Father构造函数中“this”指向Son,而“this.x”却指向Father中的“x”字段。 “this”关键字是如何工作的?

我知道关于多态性概念,但是[1]和[2]之间不会有区别吗?当内存中发生了什么新儿子()被触发了吗?


默认情况下,Java 中的所有成员函数都是多态的。这意味着当您调用 this.toString() 时,Java 使用动态绑定来解析调用,调用子版本。当您访问成员 x 时,您访问的是当前作用域的成员(父亲),因为成员不是多态的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java继承中的“this”关键字如何工作? 的相关文章

随机推荐

  • 在 iPad 中创建交互式视频 - 用于产品演示的应用程序

    我想创建需要在 iPad 本机应用程序上运行的视频 该应用程序需要通过 iPad 展示产品演示 它也需要具有互动性 我知道我们可以在 Flash 中执行这些操作 因为 iPad 不支持 Flash 我有什么选择 我很感激任何指导或提示 先感
  • 如何将 C# 中的“where”关键字与通用接口和继承一起使用

    我想要实现的是 声明一个泛型类 将 T 限制为实现 IMySpecialInterface 的类型 其中 X 不是已知类型 并让该类继承父类 举一个不正确的例子 public class MyClass
  • 层次结构查看器结果解释

    几天前 我在 Eclipse 中安装了 ADT 插件的更新 并且刚刚尝试了新的层次结构查看器工具 除了我花了一段时间才发现测量值仅在第一个 父 视图中计算之外 我还观察到每次显示的值都不相同 即使我的应用程序中没有任何更改 例如 我在模拟器
  • .NET 序列化排序

    我正在尝试使用 XmlSerializer 和继承序列化一些对象 但在排序结果时遇到一些问题 下面是一个与我设置类似的示例 public class SerializableBase XmlElement Order 1 public bo
  • C++ 从 Linux 访问 SQL Server

    我需要用 C 将一些数据从 Linux 写入 SQL Server 数据库 我找到了这个sqlapi com 但我认为 首先必须安装 ODBC 驱动程序并且必须工作 我关注了这个 adminlife net allgemein mssql
  • AVPlayer,播放/暂停状态通知?

    我正在寻找一种方法 以便在发生时准确收到通知AVPlayer开始播放 有 费率 属性 但目前我正在定期检查它NSTimer获取更新 我尝试了 KVO 但显然它不符合 KVO 标准 我知道有events https developer app
  • 使用 jquery 动态生成的列表项上的单击事件

    我有一个动态生成的列表 然后我单击该项目并传递index 到另一个函数 问题是这个列表是动态填充的 当我这样做时我的代码没有响应click事件 但是 如果我在动态填充的元素之外添加几个静态 li 元素到列表中 那么这些静态元素就可以工作 这
  • 未通过 .where() 从云函数获取结果

    我正在使用此代码通过比较从集合中获取数据 eslint disable const functions require firebase functions const admin require firebase admin admin
  • 嵌入 Flash 对象上的 HTML 包装器 div 无法通过 jQuery“点击”

    我一直在尝试按照客户的要求进行操作 一旦客户单击 swf 格式的顶部横幅 就重定向到活动页面 然后重定向到目标页面 您可以在以下位置查看已完成的操作 http ausdcf org http ausdcf org 如果您使用 Firefox
  • 在gnuplot中绘制不同颜色的区域

    我制作了以下脚本来在 gnuplot 中绘制图表 有几个点 每个点都封闭在一定的区域内 我想给每个封闭区域指定颜色 我的脚本如下 set terminal wxt set yrange 0 100 set xrange 0 100 unse
  • 检测我正在哪台计算机上运行 R 脚本

    我正在寻找一个 R 函数来返回正在运行脚本的计算机的标识符 或者至少区分两台已知计算机中的一台 我有两台 PC 均运行 Windows 和 RStudio 我通过 VPN 使用办公室的台式机和笔记本电脑 通常处理相同的项目 并且始终使用 R
  • 是否可以等到其他线程处理发布到它的输入消息?

    我想可靠地模拟用户输入到其他窗口 我用SendInput为此 但我需要等到目标应用程序处理输入后再发送更多内容 据我所知 SendInput尽管它的名字如此 但它实际上将消息发布到队列中 并且不会等到它们被处理 我的尝试是基于等待消息队列至
  • jQuery:使用退出按钮退出全屏模式时如何执行代码?

    以下问题 使用我的代码 我通过单击列表中的图像进入全屏模式 我通过 jQuery 将下一个按钮和上一个按钮移动到屏幕边缘 但离开全屏模式后 我希望它们回到原来的位置 但是如何检测全屏模式是否被取消呢 这是我的代码 HTML div span
  • C++ 标准是否保证“a”“b”合并为“ab”? [复制]

    这个问题在这里已经有答案了 下面的代码是cpp标准吗 我以前见过它并且效果很好 但是 我不确定这个标准是否已经存在 include
  • 增强 java.util.Date 类时,cglib 抛出 IllegalArgumentException

    我正在努力增强java util Date与cglib 它不起作用 而且我对 cglib 没有经验 所以我想知道出了什么问题 例如 下面的代码增强了ArrayList works Test public void enhance Array
  • 合并 data.frame 但只保留唯一的列?

    假设我想合并两个 data frames 但有些列是多余的 相同 我如何合并这些 data frames 但删除冗余列 X1 data frame id c a b c same c 1 2 3 different1 c 4 5 6 X2
  • GoogleMock:如何精确预期具有特定参数的一次调用,并查看失败诊断?

    也许是一个技巧问题 我的问题是 如果我写 EXPECT CALL mock handleMessage Times 0 expectation 1 EXPECT CALL mock handleMessage Pointee IsLike
  • 在 opencv 中索引矩阵的最佳方法

    可以说 A and B是相同大小的矩阵 在Matlab 我可以使用简单的索引 如下所示 idx A gt 0 B idx 0 我怎样才能做到这一点OpenCV 我应该只使用 for i 0 rows for j 0 cols if A at
  • R:如何在数据帧内进行偏移和匹配?

    我想使用类似于Excel的OFFSET和MATCH函数的东西 这里是一个示例数据集 数据 Which Test Test1 Test2 Test3 RESULT Test1 TRUE 80 0 Test2 FALSE 25 0 Test1
  • Java继承中的“this”关键字如何工作?

    在下面的代码片段中 结果确实令人困惑 public class TestInheritance public static void main String args new Son Father father new Son System