可变参数方法覆盖/重载混乱

2023-11-26

方案1

class B
{
 public void m1(int x)
{
 System.out.println("Super class");
}
}

class A extends B
{
 public void m1(int... x)
{
 System.out.println("Sub class");
}
}

class test1
{
public static void main(String args[])
{
  B b1 = new B();
  b1.m1(10);

  A a = new A();
  a.m1(10);

  B b2 = new A();
  b2.m1(10);
}
}

输出 :

  1. 超一流
  2. 超类(无法理解为什么是超类?!)
  3. 超类(无法理解为什么是超类?!)

方案2:

class B
{
 public void m1(int... x)
{
 System.out.println("Super class");
}
}

class A extends B
{
 public void m1(int x)
{
 System.out.println("Sub class");
}
}

class test1
{
public static void main(String args[])
{
  B b1 = new B();
  b1.m1(10);

  A a = new A();
  a.m1(10);

  B b2 = new A();
  b2.m1(10);
}
}

Output:

  1. 超一流
  2. 子类(无法理解为什么要子类?!)
  3. 超类(无法理解为什么是超类?!)

大家好,有人可以解释一下输出中是否存在覆盖/重载吗?


没有压倒性的在这个问题中,只是超载. 压倒一切将涉及A定义一个方法相同的签名作为相应的方法B(例如,如果他们都有m1(int))。在这两个示例中您都没有这样做,因为参数类型不同(int vs. int...).

方法签名解析的机制(选择要使用的重载)包含在JLS §15.12.2:编译时步骤 2:确定方法签名。 Java编译器会选择最具体的方法它可以在定义的接口上根据参考文献的类型(在您的情况下,变量的类型)如果有任何歧义。

请注意,重要的是引用的类型,而不是引用所引用的对象的类型。引用的类型(您的情况下的变量)定义了界面你必须到对象。 (这是一般 OOP 意义上的“接口”,而不是以其命名的 Java 特定事物。)编译器只能从该接口中可用的方法中进行选择。

有了这样的背景,原因就很明显了:

方案一:

  1. 超一流- 因为b1属于类型B, and B只有m1(int), and m1(10)匹配它。
  2. 超一流- 因为a属于类型A; A两者都有m1(int) (from B)以及它自己的m1(int...);前者是更具体, so B's m1(int)用来。
  3. 超一流- 因为b2属于类型B and B只有m1(int).

方案2:

  1. 超一流- 因为b1属于类型B, and B只有m1(int...), not m1(int).
  2. 子类- 因为a属于类型A, and A两者都有m1(int...) (from B)以及它自己的m1(int);后者更具体,所以A's m1(int)用来。
  3. 超一流- 因为b2属于类型B, and B只有m1(int...), not m1(int).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可变参数方法覆盖/重载混乱 的相关文章

  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • 获取矩形与直线的交点

    我需要得到矩形和直线的交点 我的 B 点位于矩形 矩形中心 内部 A 点位于外部 我需要在矩形边框之一上找到 C 点 我还得到了矩形的宽度和高度 这一切都将是WPF应用程序 所以如果有任何内置功能我会非常高兴 这是基本数学求解线与线相交的问
  • 在 python 正则表达式中匹配 unicode 表情符号

    我需要提取文本中数字和表情符号之间的文本 示例文本 blah xzuyguhbc ibcbb bqw 2 extract1 jbjhcb 6 extract2 bjvcvvv output extract1 extract2 我编写的正则表
  • 在 Flutter 中使用 Firebase 身份验证检查用户是否是新用户

    根据底部这一页 AdditionalUserInfo提供了一个方法叫做isNewUser 例如 检查社交登录 Facebook Google 等 是否是登录或注册 给出了一个例子这个答案 Flutter 的问题是我找不到任何名为Additi
  • 并行运行一组 TaskEithers,但如果 1 个或多个任务失败则继续

    我必须并行进行一组 IO 调用 如果成功则合并调用的内 容 如果其中一个失败 其他的将按正常方式处理 但会出现一条错误消息 我对如何实现这一点的思考过程 Array
  • For-In 循环多个条件

    随着 Xcode 7 3 的新更新 出现了很多与新版本 Swift 3 相关的问题 其中一个问题是 C 风格的 for 语句已被弃用 将在未来版本的 Swift 中删除 这出现在传统的 Swift 版本中 for声明 其中一个循环有多个条件
  • 更改导航后退按钮的目的地

    如何更改默认导航后退按钮将我带到的视图控制器 后退按钮通常会将您带回到上一个视图控制器 但是如果我想让它通过两个视图控制器返回怎么办 我的意思是我想更改后退按钮将我带到的视图控制器 我不喜欢创建自定义后退按钮 那么还有其他办法吗 可能是与后
  • 不同方法名的接口实现

    我有这个界面 public interface INameScope void Register string name object scopedElement object Find string name void Unregiste
  • 对于不使用 Emacs 的 Windows 用户是否值得交换 Ctrl 和 Caps Lock

    我已经了解 Steve Yegge 的建议交换 Ctrl 和 Caps Lock虽然我不使用 Emacs 但已经有一段时间了 我刚刚尝试将它们交换作为实验 但发现很难调整 现在有几个快捷键对我来说已经是第二天性了 但我还没有意识到它们在我使
  • 使用正则表达式进行 LDAP 搜索

    有没有办法可以使用字段的正则表达式在 LDAP 上进行搜索 我在用LDAP搜索或 Sun Java System Directory Server 控制中心 进行搜索 答案是否定的 你不能 为什么 因为 LDAP 标准将 LDAP SEAR
  • Python。 Matplotlib 倒置图像

    我不知道这里出了什么问题 import matplotlib pyplot as plt im plt imshow plt imread tas png plt show 并且Y轴反转了 所以我写了一篇论证origin lower im
  • 将数学表达式中的^(幂)符号替换为C的pow语法

    我有一个数学表达式 例如 2 x 3 2 x 5 7 10 0 5 我需要更换 符号到powC语言的函数 我认为正则表达式是我所需要的 但我不知道像专业人士那样的正则表达式 所以我最终得到了这个正则表达式 s s 我不知道如何改进这一点 你
  • 在父级 Shiny 服务器中调用反应式数据集的 Shiny 模块

    我正在寻求移植一些较旧的闪亮应用程序以使用闪亮模块 但在尝试移植我的反应式表达式时遇到了麻烦 根据文档 目标不是阻止模块与其交互 包含应用程序 而是使这些交互变得明确 如果一个 模块需要使用反应式表达式 取反应式 表达式作为函数参数 我有现
  • Monotouch和XCode 4,风口去哪儿了?

    今天我用最新版本的 MonoDevelop MonoTouch 和 Mono Framework 更新了我的 mac 我还下载了最新版本的 XCode 版本 4 一个漂亮的 4 5 gig 下载 起初我没有注意到它 因为我正忙着将代码复制到
  • Clojure 中的多态模式验证

    我想使用架构来验证请求对象 映射中的值之一决定哪些其他字段有效 例如 这些都是有效的 name jane type dog barking true name alan type bird cheeping true name bert t
  • 失败,因为:de.measite.minidns.hla.ResolutionUnsuccessfulException:请求 xxxx。 IN AAAA 产生错误响应 NX_DOMAIN

    在我升级 smack 到 4 2 0 后 我遇到了连接问题 The following addresses failed xxxx 5222 failed because de measite minidns hla ResolutionU
  • 无需数据绑定即可渲染值

    在 AngularJS 中 如何在没有 2 路数据绑定的情况下渲染值 出于性能原因 或者甚至在给定时间点渲染一个值 人们可能想要这样做 以下示例均使用数据绑定 div value div div div 我如何渲染value 没有任何数据绑
  • Hibernate:将基类的实例更改为子类

    我想将一个具体的超类更改为其子类之一 我在下面提供了一个示例 Entity Table name employees Inheritance strategy InheritanceType JOINED public class Empl
  • 如何将“YYYY-MM-DD hh:mm:ss”格式的日期转换为 UNIX 时间戳

    如何转换格式为 YYYY MM DD hh mm ss 的时间 例如 2011 07 15 13 18 52 到 UNIX 时间戳 我尝试了这段Javascript代码 date new Date 2011 07 15 getTime 10
  • 为什么 Composer 在 300 秒后设置超时?

    我有一个用 symfony2 制作的小项目 当我尝试在我的服务器上构建它时 解压缩 symfony 时总是失败 构建正常 突然作曲家无法解压 symfony 我没有更改任何内容 我尝试使用 Jenkins 构建 也尝试从 bash 手动构建
  • 可变参数方法覆盖/重载混乱

    方案1 class B public void m1 int x System out println Super class class A extends B public void m1 int x System out printl