JavaSE7规范8.4.9中关于重载的混乱措辞
这里,我引用Java SE 7规范8.4.9中的第一行: 如果一个类的两个方法(无论是在同一个类中声明的,还是都由一个类继承的,或者一个声明的和一个继承的)具有相同的名称,但签名不是重写等价的,则称该方法名为重载 因此,任何不符合重写等价条件的内容都被称为重载 但下面示例中的两种方法既不等同于重写,也不能被认为对重载有效JavaSE7规范8.4.9中关于重载的混乱措辞,java,overloading,Java,Overloading,这里,我引用Java SE 7规范8.4.9中的第一行: 如果一个类的两个方法(无论是在同一个类中声明的,还是都由一个类继承的,或者一个声明的和一个继承的)具有相同的名称,但签名不是重写等价的,则称该方法名为重载 因此,任何不符合重写等价条件的内容都被称为重载 但下面示例中的两种方法既不等同于重写,也不能被认为对重载有效 public String my_method(int x) {.....} public int my_method(int x) {.....} 重写无效,因为其中一
public String my_method(int x) {.....}
public int my_method(int x) {.....}
重写无效,因为其中一个的返回类型不是另一个返回的子类
对于重载无效,因为单独使用不同的返回类型不足以将两个方法视为重载
对8.4.9有何评论?也许我在感知中遗漏了一些东西。您遗漏的是方法的返回类型不是其签名的一部分 8.4.2中覆盖等效物的定义如下: “如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。” 请注意,定义中没有提到返回类型 然后它说: 方法m1的签名是方法m2签名的子签名,如果:
- m2与m1具有相同的签名,或[…]
另一方面,如果一个方法位于包含另一个方法的类的子类中,那么根据8.4.5中的规则,两个方法都不能用另一个方法替换返回类型。。。因此,这也是一个编译错误。缺少的是方法的返回类型不是其签名的一部分 8.4.2中覆盖等效物的定义如下: “如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。” 请注意,定义中没有提到返回类型 然后它说: 方法m1的签名是方法m2签名的子签名,如果:
- m2与m1具有相同的签名,或[…]
另一方面,如果一个方法位于包含另一个方法的类的子类中,那么根据8.4.5中的规则,两个方法都不能用另一个方法替换返回类型。。。因此,这也是一个编译错误。缺少的是方法的返回类型不是其签名的一部分 8.4.2中覆盖等效物的定义如下: “如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。” 请注意,定义中没有提到返回类型 然后它说: 方法m1的签名是方法m2签名的子签名,如果:
- m2与m1具有相同的签名,或[…]
另一方面,如果一个方法位于包含另一个方法的类的子类中,那么根据8.4.5中的规则,两个方法都不能用另一个方法替换返回类型。。。因此,这也是一个编译错误。缺少的是方法的返回类型不是其签名的一部分 8.4.2中覆盖等效物的定义如下: “如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。” 请注意,定义中没有提到返回类型 然后它说: 方法m1的签名是方法m2签名的子签名,如果:
- m2与m1具有相同的签名,或[…]
另一方面,如果一个方法位于包含另一个方法的类的子类中,那么根据8.4.5中的规则,两个方法都不能用另一个方法替换返回类型。。。因此,这也可能是一个编译错误。来自其他两个部分的以下信息解决了您的问题: 在一个类中声明两个具有重写等效签名的方法是编译时错误