Java 属性的字段隐藏

2023-12-15

我刚刚开始学习 Java,所以如果答案有些明显,请耐心等待。我做了一些研究但没有结果。

据我了解,属性不会被覆盖,而只是隐藏字段。为了确定是否使用超类或子类中的属性,Java将检查引用的类型。

然后我不明白这里的输出:

public class Super {
    String str = "I'm super!\n";

    public String toString() {
        return str;
    }
}

public class Sub extends Super {
    String str = "I'm sub.\n";
}

public class TestFH {
    public static void main(String[] args) {
        Sub s1 = new Sub();

        System.out.printf(s1.toString());
    }
}

它给了我:

I'm super!

我知道我可以通过方法重写轻松实现我想要的目标。我只是好奇幕后发生了什么。

提前致谢。


你打电话时,s1.toString(),它发现toString()方法仅定义在Super类因此使用该方法,因为超类方法在子类中可用。你的超类方法toString()正在使用它自己的类变量str(在超类中初始化的值)作为方法的返回值以及因此的行为,即输出为I'm super!.

如果你想得到输出为I'm sub.\n那么您需要重用与超类中相同的变量并分配新的字符串值,即I'm sub.\n到它。最好的选择是将构造函数用作:

  public class Super {
     String str = "I'm super!\n";

     public Super(String stringValue){
         this.str = stringValue;
     }

     public String toString() {
        return str;
     }
  }

  public class Sub extends Super {
     public Sub(){
       super("I'm sub.\n");
     }
  }

  public class TestFH {
    public static void main(String[] args) {
       Sub s1 = new Sub();
       System.out.printf(s1.toString());
    }
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 属性的字段隐藏 的相关文章

随机推荐

  • 即使浏览器关闭,CodeIgniter 如何保留会话数据?

    我想知道 CodeIgniter 中的会话是如何工作的 当浏览器关闭时 会话不是应该自动终止吗 默认情况下 CodeIgniter 不会在浏览器关闭时销毁会话 config sess expire on close FALSE 相反 我们可
  • Chart.js 工具提示模板不起作用

    因此 我正在 Chart js 中使用条形图 并且尝试让自定义工具提示正常工作 环顾四周 似乎在这种情况下要做的事情是添加 tooltipTemplate test 到我的选项部分 这将在结果工具提示中的数据值后面显示单词 test 然而
  • 在 SQL 中存储用户定义数据的正确方法

    我想构建一个类似于 wufoo 的在线表单生成器 允许用户创建和发布自己的 Web 表单 每个提交内容都应保存到数据库中 用户稍后可以在数据库中检索提交内容 因为这些形式将是动态的 即 用户可以完全控制表单字段的数量和类型我正在尝试考虑一个
  • PHP - 当变量放入 url 时,include() 文件不起作用?

    在 PHP 中 我构建了一个网页 它使用 include 来加载网站的某些部分 然而 我现在遇到了一个类似的问题 当我使用如下网址时 data openov storingen php type actueel它给了我这个错误 Warnin
  • 如何通过 tasytpie API 将产品放入购物车?

    假设我们有这些模型 原始项目有所不同 但这将是常见任务 class Cart models Model owner models ForeignKey User products models ManyToManyField Product
  • excel vba - 多条件索引匹配

    我正在尝试在 vba 中执行多条件索引匹配函数 但我似乎无法得到结果 我使用的代码如下 wsDest Range wsDest Cells i X wsDest Cells i X Application WorksheetFunction
  • 如何使用 while 循环和拆分来汇总逗号和换行符分隔的 CSV 文件中的数据?

    Perl 脚本必须加载 CSV 数据文件并对文件中的所有数字求和 文件中只有数字 以逗号和换行符分隔 我已经完成了大部分代码 但我没有得到正确的总数 我可能会忽略某些事情或对一两个概念有根本性的误解 任何帮助将不胜感激 全部汇总的 CSV
  • 如何在 TForm 以外的控件中捕获 WM_DEVICECHANGE?

    直到今天我一直在使用以下代码来捕获WM DEVICECHANGE应用程序主窗体中的消息并且它运行良好 但是 如果我尝试在自定义控件中使用它 我不会收到有关设备插入或删除的通知 怎么了 TDriveBar class TCustomPanel
  • 将闪亮与 Quantstrat 回测相结合

    我正在尝试制作一个网络应用程序 目的是使用 quantstrat 然而 我在整合两者方面遇到了一些困难 没有这方面的文档 所以很难找到一个开始的地方 这是我现在的代码 如果您能让我知道我做错了什么 我将不胜感激 谢谢 library shi
  • 将新值插入数组

    我目前有不同长度的列向量 我想在原始数组的各个点插入另一个列向量 即 我想将新数组添加到旧数组的开头 跳过 10 个位置 再次添加新数组 再跳过 10 个空格 再次添加新数组 依此类推 直到数组末尾 我可以使用以下方法来做到这一点 Offs
  • onTouch() 连续播放声音

    我想通过onTouch连续播放枪声 我这样做是为了自动枪的声音 所以我有声音循环延迟的问题 它不会给出真正的自动枪声音效果 我的主要观点是 声音一次又一次播放时不应有延迟 我的代码是 public boolean onTouch View
  • Mysqli 准备好的 Stmt 返回 0 num_rows [重复]

    这个问题在这里已经有答案了 帮助 我得到 0 num rows 但如果我在控制台中执行查询我会得到结果 我对准备好的 stmts 有点陌生 这是我的代码 数据库连接类 class DbConnection const HOST localh
  • Delphi中如何发送广播消息

    我想在我的局域网中发送广播UDP消息 应用程序是客户端 服务器 我希望更新用户界面 这样任何计算机都会发送消息来更新其他计算机 我可以使用UDPServer indy吗 如何使用 谢谢 创建两个应用程序 一个代表发送者 另一个代表接收者 S
  • 使用DBCC CHECKIDENT重新启动Identity列计数后是否可以回滚到原始状态?

    目前 在某些操作中 我必须删除旧数据并插入新数据 但我注意到 尽管删除了数据 但身份列并未重置并从其最后一个最大值继续 因此 我使用 DBCC CheckIdent 来实现相同的目的 所有这些都在事务中发生 我可以将事务回滚到初始状态吗 D
  • Django 在 save() 方法之后插入新对象而不是更新

    当试图update现有的 Django 模型对象 带有save 方法 一个new而是插入行 例如 gt gt gt import datetime gt gt gt from data lib models import Meal gt g
  • 如何配置 Poltergeist 或 PhantomJS 不遵循重定向?

    我有一些测试要求 JS 驱动程序不遵循重定向 是否可以配置 Poltergeist 来执行此操作 我注意到可以使用以下命令将命令传递给 PhantomJS命令行界面 所以也许这是另一种方法 我对Poltergeist不熟悉 所以我只回答Ph
  • 在Python中使用中文构建字典

    这是我第一次来这里 而且我对 Python 世界还是个新手 我也在学习中文 我想创建一个程序来使用字典复习中文词汇 这是我通常使用的代码 usr bin python coding utf 8 dictionary Hello 你好 Sim
  • 从 Flask 中的数据库中删除元素

    我想确保我在这里遵循最佳实践 我有一个从数据库中提取的数据表 在最后一列中 我有用于编辑或删除该行的链接 我觉得我总是被告知永远不要使用 GET 请求修改服务器上的数据 除了 GET 请求之外 我将如何处理删除此数据行 数据表的代码如下 t
  • 我们如何将用户和机器人消息记录到微软机器人框架中的cosmos db

    我使用 microsoft bot Framework v4 sdk 创建了一个聊天机器人 我想将机器人用户和机器人消息记录到 cosmos db 我只能使用下面的博客记录用户消息 我希望记录用户和机器人的响应 值得庆幸的是 这很容易 因为
  • Java 属性的字段隐藏

    我刚刚开始学习 Java 所以如果答案有些明显 请耐心等待 我做了一些研究但没有结果 据我了解 属性不会被覆盖 而只是隐藏字段 为了确定是否使用超类或子类中的属性 Java将检查引用的类型 然后我不明白这里的输出 public class