如果有两个方法,它们的参数不同,返回类型不同.像这样:
If there are two methods, they have different parameters, and their return types are different. Like this:
int test(int p) { System.out.println("version one"); return p; } boolean test(boolean p, int q) { System.out.println("version two"); return p; }如果返回类型相同,当然是重载.但是由于返回类型不同,我们还能认为这是过载吗?
If the return types are same, of course this is overload. But since the return types are different, can we regard this as overload still?
推荐答案考虑以下几点进行重载:
consider following points for overloading:
在java中重载方法的首要规则是改变方法签名.方法签名由参数个数、参数类型和参数顺序组成(如果它们是不同类型的).
First and important rule to overload a method in java is to change method signature. Method signature is made of number of arguments, type of arguments and order of arguments if they are of different types. public class DemoClass { // Overloaded method public Integer sum(Integer a, Integer b) { return a + b; } // Overloading method public Integer sum(Float a, Integer b) { //Valid return null; } }
方法的返回类型从来不是方法签名的一部分,所以只改变方法的返回类型并不等同于方法重载.
Return type of method is never part of method signature, so only changing the return type of method does not amount to method overloading.
public class DemoClass { // Overloaded method public Integer sum(Integer a, Integer b) { return a + b; } // Overloading method public Float sum(Integer a, Integer b) { //Not valid; Compile time error return null; } }在重载方法时也不考虑从方法中抛出的异常.因此,您的重载方法会抛出相同的异常、不同的异常或根本不抛出任何异常;对方法加载完全没有影响.
Thrown exceptions from methods are also not considered when overloading a method. So your overloaded method throws the same exception, a different exception or it simply does no throw any exception; no effect at all on method loading.
public class DemoClass { // Overloaded method public Integer sum(Integer a, Integer b) throws NullPointerException{ return a + b; } // Overloading method public Integer sum(Integer a, Integer b) throws Exception{ //Not valid; Compile time error return null; } }更多推荐
Java中重载和方法返回类型的关系?
发布评论