`
GhostFromheaven
  • 浏览: 397005 次
  • 性别: 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后引入的一个概念:
协变返回类型




分享到:
评论

相关推荐

    overload and override

    1. **参数列表必须不同**:可以通过不同的参数个数或类型来区分这些方法。 2. **方法的返回类型可以不同**:即使是重载的方法,只要它们的参数列表不同,返回类型可以是任意的。 3. **方法名相同**:所有重载的方法...

    Java语言中的 覆盖重载和多态

    Java语言中的覆盖(Override)和重载(Overload)以及多态(Polymorphism)是面向对象编程的重要概念,它们是实现代码复用和灵活性的关键。 **多态性(Polymorphism)** 多态性是Java中一种允许一个接口有多种实现的方式。...

    Java重写(Override)与重载(Overload)区别原理解析

    Java重写(Override)与重载(Overload)区别原理解析 Java 编程语言中有两个重要的概念:重写(Override)和重载(Overload)。这两个概念经常被混淆,但它们具有不同的作用和特点。本文将详细地介绍 Java 中的重写和...

    java 重载(overload)与重写(override)详解及实例

    重载发生在同一类或具有继承关系的类中,它允许创建多个同名方法,但这些方法必须在参数列表上有所不同,包括参数的个数、类型或者顺序。返回值并不影响方法是否构成重载,因为调用方法时我们并不指定返回值类型。...

    java面试题

    Java面试题中涉及的核心知识点是方法的重载(Overload)和重写(Override)。这两者都是Java多态性的体现,但它们有着明显的区别。 重载(Overload)指的是在一个类中可以有多个同名的方法,这些方法的参数列表(参数个数...

    java 重载,重写以及继承,多态的区别

    重载是指在同一个类中可以定义多个同名的方法,但这些方法的形参个数或类型必须不同。编译器会根据形参的类型、个数和顺序来确定调用哪个方法。重载方法的返回值可以不同或相同,但这不是区分重载方法的依据。 例如...

    Java面试宝典2017版本高清.pdf版

    - Java中重载(Overload)和重写(Override)的区别,以及返回值类型的相关规则; - Java中构造器能否被重写(override); - Java中接口和抽象类的相关特性,以及它们之间的区别; - Java中实现多态的机制; - Java中异常...

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

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

    Java面试宝典2017版

    - 重载允许一个类中有多个同名方法,但参数列表必须不同(参数数量、类型或顺序不同)。返回值类型不影响重载。 - 覆盖发生在子类重写父类的已有的方法,必须保持方法签名一致,包括名称、参数列表及访问权限。...

    Java常见面试题汇总

    方法重载用于同名方法不同作用的情况下,方法名称相同,参数列表不同则构成方法重载,方法重载和返回值类型、访问修饰符都无关。方法重写发生在父子类中或接口与实现类中。它用于子类覆盖父类方法实现。 八、面向...

    java面经八股文整理

    构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。 Java 语言中的作用域有四种:public、private、protected 和默认(default)。public 修饰的元素可以被所有类访问,private 修饰的...

    Java面试题含答案.doc

    答案:Overload是同名不同参,Override是同名同参,Overloaded 方法可以改变返回值类型。 十九、构造器和接口 19. 构造器 Constructor 是 否 可 被 override? 答案:构造器不能被 override,因为它不是方法。 ...

    JAVA面试题甲骨文

    答:Overload 是方法重载,Override 是方法重写,Overloaded 的方法可以改变返回值的类型。 15. 写 clone()方法时,通常都有一行代码(不是必须有),是什么? 答:super.clone()。 16. 面向对象的特征有哪些方面...

    Java_OCJP认证试题合集

    从给定的文件信息中,我们可以提取出与Java OCJP认证考试相关的几个核心知识点,包括类型转换、方法重写(Override)与重载(Overload)、异常处理以及控制流语句。下面将对这些知识点进行详细阐述。 ### 类型转换...

    九阳神功之java面试题

    18. Overload(重载)是指在同一个类中,方法名相同但参数列表不同,返回值类型不影响重载。Override(覆盖)是子类重写父类的方法,要求方法名、参数列表和返回值类型都相同,且访问权限不得更低。 【构造器】 19...

    Java面试宝典

    Java中是否可以覆盖(override)一个private或者是static的方法?** - **static**:表示静态的,可以用来修饰类、方法或变量。静态成员是类级别的,不依赖于对象的存在。 - 不能覆盖`private`或`static`方法,因为...

    Java面试宝典2017版.doc

    Overload(重载)是方法名相同但参数列表不同的方法,可以有不同的返回类型。Override(重写)是指子类方法覆盖父类方法,方法名、参数列表和返回类型都必须相同。 19. 构造器Constructor是否可被override? 构造器...

    农业银行Java基础面试题.pdf

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。 8. GC是什么?为什么要有GC? GC是垃圾收集的意思(Gabage Collection),内存处理是编程...

    java面试试题,精挑细选

    Overloaded 的方法是否可以改变返回值的类型? Overload 是指多个方法名相同,但参数列表不同的方法。Override 是指子类中重写父类的方法。Overloaded 的方法可以改变返回值的类型。 18. 搞了多个重载方法,参数...

    葵花宝典子Java.docx

    - **Overload**(重载):在同一个类中定义多个同名方法,但方法的参数列表不同(参数个数或类型不同),这称为方法的重载。 - **Override**(重写):发生在父类与子类之间,子类中定义了一个与父类同名且参数列表...

Global site tag (gtag.js) - Google Analytics