`

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

 
阅读更多
重载是一定不允许的。比如
Java代码 收藏代码
  1. classSuper{
  2. voidf(){
  3. }
  4. intf(){
  5. return1;
  6. }
  7. }


原因在与如果调用时int i = f();可以知道是调用Sub的f()。但是,往往用户不关心返回值。只是f()。这样就无法确定到底是哪个。

覆盖一般情况是不允许的。比如


Java代码 收藏代码
  1. classSuper{
  2. voidf(){
  3. }
  4. }
  5. classSubextendsSuper{
  6. intf(){
  7. return1;
  8. }
  9. }


编译会报错。
但是有办法可以不同(表面上不同)。比如

Java代码 收藏代码
  1. classGrain{
  2. publicStringtoString(){
  3. return"Grain";
  4. }
  5. }
  6. classWheatextendsGrain{
  7. publicStringtoString(){
  8. return"Wheat";
  9. }
  10. }
  11. classMill{
  12. Grainprocess(){//注意返回值
  13. returnnewGrain();
  14. }
  15. }
  16. classWheatMillextendsMill{
  17. Wheatprocess(){//注意返回值
  18. returnnewWheat();
  19. }
  20. }
  21. publicclassCovariantReturn{
  22. publicstaticvoidmain(String[]args){
  23. Millm=newMill();
  24. Graing=m.process();
  25. System.out.println(g);
  26. m=newWheatMill();
  27. g=m.process();
  28. System.out.println(g);
  29. }
  30. }


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

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面经八股文整理

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

    九阳神功之java面试题

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

    Java_OCJP认证试题合集

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

    葵花宝典子Java.docx

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

    java-notes(JAVA笔记资料)[定义].pdf

    方法的重载(overload)和覆盖(override)是Java中的重要概念。重载发生在同一类或父子类中,要求方法名相同但参数列表不同。覆盖则仅在父子类间,要求名字、参数列表、返回值及修饰符相同。重载的例子是A类中有两...

    C#重写重载与多态

    重写(Override)允许子类对从基类继承来的方法进行重新定义,以便提供不同的实现或增强功能。在C#中,为了能够重写一个方法,基类中的方法必须声明为`virtual`或`abstract`,而子类中相应的方法则需使用`override`...

    Java面试问答题.pdf

    6. 方法重载和方法覆盖:Java支持方法重载(Overload)和方法覆盖(Override)。方法重载是指在同一个类中可以存在一个以上的同名方法,只要它们的参数列表不同即可。方法覆盖是指在子类中可以定义一个与父类中声明...

    Java经典面试题

    - Overload(重载)是指在同一个类中,方法名相同但参数列表不同(参数个数、类型或顺序不同)。 - Override(重写)是指子类重写父类中的方法,保持方法名、返回类型和参数列表完全一致。 - Overload不涉及...

    JavaCode代码文件\模拟面试专题.ppt

    在Java中,Overload(重载)和Override(重写)是两个重要的概念。重载发生在同一类中,通过方法名相同但参数列表不同(参数个数、类型或顺序不同)来实现。重写则发生在父类和子类之间,子类覆盖父类的同名方法,...

    Java常见面试题汇总

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

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

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

Global site tag (gtag.js) - Google Analytics