`
GhostFromheaven
  • 浏览: 394334 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA是否允许返回值类型不同的重载overload或覆盖override?

    博客分类:
  • Java
阅读更多
重载是一定不允许的。比如
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);
	}
}


这样是完全可以的,运行结果

Grain
Wheat

其实也并不难理解,因为子类本身就可以看做是父类。这个是JAVA1.5后引入的一个概念:
协变返回类型




分享到:
评论

相关推荐

    PHP和JAVA中的重载(overload)和覆盖(override) 介绍

    重载:同一个类中,函数名一样,返回值或者参数类型,个数不一样的叫做重载。 覆盖:同名函数,同返回值类型,同参数的叫做覆盖。指的是子类对父类中方法的覆盖。 PHP不支持方法和操作符重载。JAVA不支持操作符的...

    java面试题

    重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例...

    C++中overload,override,overwrite的区别详细解析

    Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;...

    PHP中overload与override的区别

    override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被...

    Java重载和重写的区别--源码实例

    不能通过返回值重载fun方法。 //public boolean fun(int i) throws Exception { // System.out.println("method fun in OverloadTest, parameter type: int, exception: Exception, return: boolean"); // ...

    JAVA面试题最全集

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出...

    javakejian

    2)重载( overload )——在同一个类中定义多个同名的定义内容不同但最终功能相同的方法。 比如,程序中定义多个名为 print方法,用来打印不同类型的数据,如字符型、数值型等。 区分同名方法的措施:采用不同的...

    C++中Overload,Override,Hide之间的区别

    简介•Overload: 重载,指函数同名,但是参数个数不同、或者参数类型不同的多个实现。(如果参数相同但是仅仅返回值不同不是重载,编译器会报错。) 编译器判断重载函数:•第一步,是确定该调用中所考虑的重载函数...

    C++中的重载、覆盖、隐藏介绍

    指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。 (1)相同的范围(在同一个作用域中) ; (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 (5)返回值可以...

    JAVA 综合面试题.doc

    它的关系是同一个类,同一个方法名,不同的方法参数或返回值。 10. Final类有什么特点?.....................................................................................11 属性常量  方法不可以...

    java 面试题 总结

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byte...

    SCJP考试题集 有详细解析

    二、返回值可以不同,但是不能是重载时唯一的不同点(这点和c++中不同,c++中返回 类型必须一致)。方法重写发生在类继承时,子类可以重写一个父类中已有的方法,必须在返回类型和参数列表一样时才能说是重写,否则...

    超级有影响力霸气的Java面试题大全文档

     Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character ...

    AIC的Java课程1-6章

     掌握方法重载(overload)的基本要求。  区别和掌握按值传递与按引用传递。 第4章 面向对象(封装) 4课时  理解类封装属性(数据成员)和行为(方法成员),区别类和对象。  能够定义类...

    浅谈C++重载、重写、重定义

    一、重载(overload) 指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。 (1)相同的范围(在同一个作用域中) ; (2)函数名字相同; (3)参数不同; (4)virtual 关键字...

    进销存系统文档作业例子

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复...

Global site tag (gtag.js) - Google Analytics