当前位置: 首页 > 面试题库 >

Java中重载和方法返回类型的关系?

滕渝
2023-03-14
问题内容

如果有两个方法,则它们具有不同的参数,并且它们的返回类型也 不同 。像这样:

int test(int p) {
   System.out.println("version one");
   return p;
}

boolean test(boolean p, int q) {
   System.out.println("version two");
   return p;
}

如果返回类型相同,则当然是 重载 。但是由于返回类型 不同 ,我们还可以将其视为 过载 吗?


问题答案:

考虑过载的以下几点:

  1. 在Java中重载方法的首要原则是更改方法签名。方法签名由参数数量,参数类型和参数顺序(如果它们是不同类型)组成。

    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;
    }
    

    }

  2. 方法的返回类型从不属于方法签名的一部分,因此仅更改方法的返回类型并不等于方法重载。

    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;
    }
    

    }

  3. 重载方法时,也不会考虑方法引发的异常。因此,您的重载方法将引发相同的异常,不同的异常,或者它仅不引发任何异常。对方法加载完全没有影响。

    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;
    }
    

    }



 类似资料:
  • 在执行基本方法重载程序时,我始终收到以下错误: sh-4.3 $ javac HelloWorld . Java < br > HelloWorld . Java:10:错误:方法show()已在类hello world中定义< br > static void show()< br > hello world . Java:25:错误:方法show(int,int)已在类hello world中

  • 问题内容: 为什么仅通过更改返回类型就不可能重载函数?将来的Java版本会改变吗? 顺便说一句,仅供参考,这在C ++中可能吗? 问题答案: 你无法在Java中做到这一点,也无法在C ++中做到这一点。基本原理是,仅返回值不足以使编译器确定要调用的函数:

  • 但是同时使用不同签名和不同返回类型的重载方法有什么问题呢?为什么这会产生错误?

  • 问题内容: 我在这里多次看到类似的问题,但有一个很大的不同。 在其他问题中,返回类型将由参数确定。我想要/需要做的是通过解析后的值确定返回类型。从我收集到的信息来看,以下方法可行: 我只是想确保在我搞砸任何东西之前,它有机会工作。提前致谢。 问题答案: 你做不到 Java返回类型必须是固定的基本类型或对象类。我敢肯定,您能做的最好的事情就是返回一个包装器类型,该包装器类型具有可获取各种可能类型的值

  • 为什么下面要抛出NullPointerException?: 提前致谢

  • Java中是否有一种方法可以通过一个方法的声明返回不同的类型? 我希望此方法返回一个对象,并在函数调用时将其转换为正确的类型。这就是我的想法,但它不是这样工作的。我是否需要某种通用返回类型来执行此操作?解决这个问题的最佳方法是什么?