java 重载的返回类型_java方法的重载与覆盖的返回值类型 转

首先看一段程序:

package testOverLoadandoverRide;

public class A extends B{

//下面的是方法的覆盖(overRiding)

public void riding(){

System.out.println("this is  overRiding ");

}

//下面两个函数是方法的重载(overLoading),但是返回值类型不同,可以运行

public String loading(int x){

System.out.println("this is overLoading return String");

return null;

}

public int loading(int x,int y){

System.out.println("this is overLoading return int");

return 0;

}

public static void main(String[] args) {

A a = new A();

a.riding();

a.loading(2);

a.loading(2,3);

}

}

class B{

public void riding(){

System.out.println("this is B");

}

}

下面是运行结果:

this is  overRiding

this is overLoading return String

this is overLoading return int

有以上程序可以知道,方法的重载是可以改变返回值类型的,但是尚不能说明方法的覆盖是否可以改变返回值类型,现在修改A类中 riding()方法的返回值类型为int,

public int riding(){

System.out.println("this is  overRiding ");

}

此时会有如下的错误:

0_1309596414KTUQ.gif

由此可知,方法的覆盖是不允许修改返回值类型的。

以上测试程序运行在JDK1.5版本。

我对此的解释为:

方法的重载是根据函数的参数列表来决定的,即:参数列表的个数,类型,顺序三个方面;

对于其返回值类型,就是改变了也不会有影响,因为你不可能写成参数类表相同(个数,类型,顺序)的方法重载,因为那根不就不是重载。所以返回值类型也就不能作为程序运行时选择函数的一个标准,因此返回值类型也就没了对函数选择时的影响。

方法的覆盖不仅根据函数的参数列表还要根据返回值类型,因为覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

覆盖时还有“类型的提升”这一点,具体可以参考

总结如下:

方法覆盖必须满足下列条件

(1) 子类的方法的名称及参数必须和所覆盖的方法相同

(2) 子类的方法返回类型必须和所覆盖的方法相同

重载方法必须满足下列条件

(1) 方法名必须相同

(2) 方法的参数签名必须相同        //这句话对吗?????????

(3) 方法的返回类型和方法的修饰符可以不相同

###########################################################

1. public class A {

2. public void doit() {

3. }

4. public String doit() { //编译不通过,因为:方法重载要求参数签名必须不一致5. return

“a”;

6. }

7. public double doit(int x) {

8. return 1.0;

9. }

10.}

What is the result?

A. An exception is thrown at runtime.

B. Compilation fails because of an error in line 7.

C. Compilation fails because of an error in line

4.D. Compilation succeeds and no runtime errors with

class A occur.

Answer: C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值