Java方法只有函数重载 返回值类型型不同算不算重载

&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
JAVA是否允许返回值类型不同的重载overload或覆盖override?
摘要:重载是一定不允许的。比如classSuper{voidf(){}intf(){return1;}}原因在与如果调用时inti=f();可以知道是调用Sub的f()。但是,往往用户不关心返回值。只是f()。这样就无法确定到底是哪个。覆盖一般情况是不允许的。比如classSuper{voidf(){}}classSubextendsSuper{intf(){return1;}}编译会报错。但是有办法可以不同(表面上不同)。比如classGrain{publicStringtoSt
重载是一定不允许的。比如
class Super{void f(){}int f(){return 1;}}
原因在与如果调用时int i = f();可以知道是调用Sub的f()。但是,往往用户不关心返回值。只是f()。这样就无法确定到底是哪个。
覆盖一般情况是不允许的。比如
class Super{void f(){}}class Sub extends Super{int f(){return 1;}}
编译会报错。
但是有办法可以不同(表面上不同)。比如
class Grain{public String toString(){return &Grain&;}}class Wheat extends Grain{public String toString(){return &Wheat&;}}class Mill{Grain process(){//注意返回值return new Grain();}}class WheatMill extends Mill{Wheat process(){//注意返回值return new Wheat();}}public class CovariantReturn {public static void main(String[] args) {Mill m = new Mill();Grain g = m.process();System.out.println(g);m = new WheatMill();g = m.process();System.out.println(g);}}
这样是完全可以的,运行结果
其实也并不难理解,因为子类本身就可以看做是父类。这个是JAVA1.5后引入的一个概念:
协变返回类型
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
为您提供0门槛上云实践机会
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
JAVA是否允许返回值类型不同的重载overload或覆盖override?相关信息,包括
的信息,所有JAVA是否允许返回值类型不同的重载overload或覆盖override?相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International重载方法的返回类型必须一致_中华文本库
重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法。 重写要求参数签名必须一致,而重载要求参数签名必须不一致; 重写要求返回类型必须一致,而重载...
修饰符,可以修饰类、接口、抽象类、方法和属性 B) final 修饰的类肯定不能被...重载 C) 重载要求方法名相同,参数列表不同 D) 方法的返回值类型不是区分方法...
通过普通函数实现运算符重载的特点是自定义类不得不将其成员变 量公开,以便让...返回类型 operator 运算符(参数列表); 也可以在类定义之外定义运算符函数,但要...
函数重载是指( A )。 A. 两个或两个以上的函数...两个以上的函数取相同的函数名,并且函数的返回类型...要加修饰符 静态数据成员要在类体外进行...
函数的返回类型的描述中,错误的是( A 可以是类类型 B 可以是 int 类型 C 可以是 void 类型 D 可以是 float 类型 4、 下列运算符不能用友元函数重载的是(...
运算符重载函数定义的一般格式为: &type& className::operator @(&Arg&); Type: 为函数返回值的类型; ClassName: 为运算符重载函数所在的类名; @:为要重载...
运算符重载函数的返回值是 Complex 类型,返回 值是复数 c1 和 c2 之和 (...运算符函数不作为成员函数,而把它放在类外,在 Complex 类中声明它为友元函数。...为什么方法名、参数相同,返回值类型不同的方法不是重载
[问题点数:20分,结帖人leewei0920]
为什么方法名、参数相同,返回值类型不同的方法不是重载
[问题点数:20分,结帖人leewei0920]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2010年4月 Web 开发大版内专家分月排行榜第三
匿名用户不能发表回复!|博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)首先看一段程序:
package testOverLoadandoverRpublic 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");}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 Stringthis is overLoading return int
有以上程序可以知道,方法的重载是可以改变返回值类型的,但是尚不能说明方法的覆盖是否可以改变返回值类型,现在修改A类中&riding()方法的返回值类型为int,
public int riding(){System.out.println("this is &overRiding ");}
此时会有如下的错误:
由此可知,方法的覆盖是不允许修改返回值类型的。
以上测试程序运行在JDK1.5版本。
我对此的解释为:
方法的重载是根据函数的参数列表来决定的,即:参数列表的个数,类型,顺序三个方面;
对于其返回值类型,就是改变了也不会有影响,因为你不可能写成参数类表相同(个数,类型,顺序)的方法重载,因为那根不就不是重载。所以返回值类型也就不能作为程序运行时选择函数的一个标准,因此返回值类型也就没了对函数选择时的影响。
方法的覆盖不仅根据函数的参数列表还要根据返回值类型,因为覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
覆盖时还有&类型的提升&这一点,具体可以参考
总结如下:
方法覆盖必须满足下列条件(1) 子类的方法的名称及参数必须和所覆盖的方法相同(2) 子类的方法返回类型必须和所覆盖的方法相同重载方法必须满足下列条件(1) 方法名必须相同(2) 方法的参数签名必须相同        //这句话对吗?????????(3) 方法的返回类型和方法的修饰符可以不相同
###########################################################
1. public class A {
2. public void doit() {
4. public String doit() { //编译不通过,因为:方法重载要求参数签名必须不一致5. return
7. public double doit(int x) {
8. return 1.0;
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.
阅读(...) 评论()

我要回帖

更多关于 java重载返回值类型 的文章

 

随机推荐