java - 重载具有不同访问修饰符、返回类型和参数的方法是否仍被视为重载?
问题描述
这可能只是语义,可能是一个愚蠢的问题,但我很好奇以下是否会被认为是重载:
public String name = "name";
public void printName() {
System.out.println(name);
}
protected String printName(String extra) {
System.out.println(name + extra);
return name + extra;
}
我读过的所有内容都说必须更改参数才能发生重载,并且只要参数不同,更改访问修饰符和返回类型就不会导致编译错误,但我不知道后者是否仍将被视为超载。
解决方案
如有疑问,JLS 将提供帮助:
如果一个类的两个方法(无论是在同一个类中声明,还是都由一个类继承,或者一个声明一个继承)具有相同的名称但签名不是覆盖等效的,则该方法名称被称为超载。
因此,这不是“更改参数”,而是不是 override-equivalent。要找出那是什么,请转到另一章,上面写着:
如果 m1 是 m2 的子签名或 m2 是 m1 的子签名,则两个方法签名 m1 和 m2 是覆盖等效的。
同一章解释了什么是子签名:
方法 m1 的签名是方法 m2 签名的子签名,如果:
m2 与 m1 具有相同的签名,或
m1 的签名与 m2 签名的擦除(第 4.6 节)相同。
您如何解释上述方法是留给您的练习。
推荐阅读
- javascript - Odoo 销售点:添加按钮以打印不同的收据格式?奥多 13
- roblox - Roblox:如果玩家没有正确完成任务,如何杀死他们?
- javascript - 对象创建错误(后端控制器)
- visual-studio-code - VS Code 中更漂亮的奇怪行为
- flutter - 将状态设置为 onpressed 浮动操作按钮未执行任何更改
- mysql - 同一个自动递增 id 的多个值,不是多对多
- node.js - 使用 pm2 运行 Web 服务器并连接 psql 数据库
- amazon-web-services - 允许其他人下载我拥有的数据集的最便宜的方法是什么?
- theory - 属性与包含它的类之间的关系名称是什么?
- python - 密码验证 - python