为什么我们不能重载一个具有相同返回类型,名称,参数但有一些抛出异常的方法?如图所示
public String getAppletInfo(){ }
public String getAppletInfo() throws Exception{ }
答案 0 :(得分:12)
当您在代码中调用getAppletInfo()
时,您希望JVM如何选择要调用的重载?单个方法调用中没有语义信息,允许您指定它应该期望的异常。
答案 1 :(得分:5)
根据JLS(Java语言规范),抛出的异常不是方法签名的一部分。因此,您提供的方法定义不会因其签名而有所不同,因此不是有效的Java代码。
JLS
Section 8.4.9:
如果一个类的两个方法(无论是在同一个类中声明,还是由一个类继承,或者一个是声明的,一个是继承的)都具有相同的名称,但签名不是覆盖等效的,那么方法名称就是过载
方法签名定义如下:
Section 8.4.2
如果两个方法具有相同的名称和参数类型,则它们具有相同的签名。
答案 2 :(得分:3)
如果我打电话给myObject.getAppletInfo()
哪一个被叫?
答案 3 :(得分:0)
任何方法都可以抛出RuntimeException
,它是Exception
的子类。因此,添加throws Exception
对于编译器选择正确的方法来说还不够明显。
答案 4 :(得分:0)
首先,函数重载的基础是方法签名必须是不同的,包括参数的数量和参数的类型(参见docs)。因此,如果在两种方法中,如果它只是与不同的抛出异常部分不计算在内 函数重载。
重载方法可以抛出它重载的方法抛出/抛出的任何异常,因为它们都是独立的东西。