`

重写与重载的区别?重载的方法是否可以改变返回值的类型?

阅读更多

首先看一段程序:

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 ");
	}

 此时会有如下的错误:

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

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

我对此的解释为:

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

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

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

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

http://topic.csdn.net/u/20110318/16/0acfac41-4ce4-4a1e-b3e3-9b4af265c691.html

总结如下:

重写方法必须满足下列条件
(1) 子类的方法的名称及参数必须和所覆盖的方法相同
(2) 子类的方法返回类型必须和所覆盖的方法相同

(3) 子类方法不能缩小所覆盖方法的访问权限
(4) 子类方法不能抛出比所覆盖方法更多的异常

重载方法必须满足下列条件
(1) 方法名必须相同
(2) 方法的参数签名必须相同
(3) 方法的返回类型和方法的修饰符可以不相同

分享到:
评论

相关推荐

    重载与覆写/重写的区别

    重载可以改变返回值类型,但是这样做没有任何的意义, 可是对于覆写而言,绝对不能修改返回值类型,但是在子类中所覆写的方法应该可以继续进行重载。 重载(Overloading)  (1) 方法重载是让类以...

    C#重写重载与多态

    重载与返回值类型无关,它仅根据参数列表来决定调用哪个方法。例如: ```csharp public class MyClass { public void Test(int x, int y) {} public void Test(int x, ref int y) {} public void Test(int x, ...

    Java中方法重载与重写的区别

     注意:方法的返回值类型不能用来区分重载的方法。这是因为当调用一个方法时,返回值的类型是不显示的。  2、重写  方法的重写是子类对父类的方法进行改造。  方法重写必须满足下列条件。  (1)子类的...

    JAVA重写和重载.pdf

    例如,子类可以重写父类的方法,例如`bark()`方法,但具有相同的方法名、返回类型和参数表。 区别 * 重载是指在同一个类中的多态性,而重写是指父类与子类之间的多态性。 * 重载的方法名相同,但参数类型和个数...

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

    重写的方法必须与父类的方法同名,同返回值,同形参个数和类型。重写的目的是为了提供更加具体的实现。 例如,在上面的例子中,`Triangle` 类中的 `getSides()` 方法是对 `Shape` 类中的 `getSides()` 方法的重写。...

    Java方法重载和方法重写的区别.docx

    对于重写,如果方法的返回类型是基本数据类型,那么返回值类型必须相同,如果是引用类型,重写方法的返回类型必须是被重写方法的子类或相同。 5. **权限修饰符**:重写时,重写方法的访问权限不能小于被重写方法的...

    java中重载与重写

    在Java编程语言中,方法的重载(Overloading)与重写(Overriding)是两个非常重要的...通过对比分析,我们可以更加清晰地理解Java中重载与重写之间的区别及其应用场景。这对于编写高效、可维护的Java代码至关重要。

    java中重载与重写的区别.pdf

    Java 中重载与重写的区别 Java 中的重载(Overloading)和重写(Overriding)是两个不同的概念,它们都是 Java 语言中实现多态性的手段。 方法重载(Overloading) 方法重载是让类以统一的方式处理不同类型数据的...

    Java中重载和重写总结

    在方法重载中,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回值类型作为重载函数的区分标准。 3. 方法重载的例子 下面是一个简单的方法重载的例子: ```java package c04...

    PHP面相对象中的重载与重写

    Overloaded的方法是可以改变返回值的类型。也就是说,重载的返回值类型可以相同也可以不同。 重载(Overloading) a、方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个...

    面向对象编程xmind思维导图,详细知识点

    在继承的基础上方法可以重载和重写方法重载方法重载要求:① 方法名相同,参数列表不同;② 参数列表顺序不同,或返回值类型不同;方法重写方法重写要求:① 重写方法必须和被重写方法具有相同的方法名称、参数列表...

    java基础常识与概念

    基础概念与常识 ...重载和重写的区别 什么是可变长参数? 基本数据类型 Java 中的几种基本数据类型了解么? 基本类型和包装类型的区别? 包装类型的缓存机制了解么? 自动装箱与拆箱了解吗?原理是什么?

    Java方法重载和重写原理区别解析

    方法重写和重载是两个不同的概念,方法重写是指子类中的方法和父类中继承的方法有完全相同的返回值类型、方法名、参数个数和参数类型,方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。方法重写是...

    java 重载,继承,重写和多态的区别. doc

    重写发生在子类中,当子类继承了父类的方法,但希望改变其行为时,可以在子类中定义与父类同名同参数的方法。例子中,`Triangle` 类的 `getSides()` 方法覆盖了 `Shape` 类的 `getSides()` 方法,返回值为3,这是...

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

    * 子类可以重写父类的方法,但返回值和形参不能改变。 * 重写方法不能抛出新的检查异常或比被重写方法申明更加宽泛的异常。 * 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final ...

    Java重写.docx

    2. @Override注解强制检查重写方法:我们可以使用@Override注解来强制检查方法的重写, 如果我们在子类中定义的方法签名与父类相同,那么编译器将会检查方法的重写是否正确。 需要注意的三点 在方法的重写中,我们...

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

    - 覆盖不能改变返回值类型,而重载可以。 - 覆盖不能有更严格的访问修饰符,但重载可以。 - 构造函数不能被覆盖,但可以被重载。 - `final`, `private`, `static`修饰的方法不能被覆盖,但可以被重载。 - 重载可在同...

    重写equals方法

    2. 判断两个对象的类类型是否相同,可以使用 getClass() 方法来比较类字节码,或者使用 instanceof 关键字来判断左边的对象是否为右边类的实例对象。 3. 根据自己的需求决定哪个属性相同。例如,在 User 类中,可以...

    C#中重载与重写区别分析

    一、前言  接触面向对象的思想已经有一段时光了,为什么要学习面向对象呢?因为面向对象具有可复用性、可维护性、可扩展...但是如果方法名相同,参数个数、次序、类型都相同,而返回值不同,则无法构成重载。  重写:

    2_Offer--面试小抄第二版 亮白 By 库森.pdf

    override、重写、私有方法、静态资源、非静态资源、面向对象、面向过程、多态、重载、重写、hashCode、equals、String、StringBuffer、StringBuilder、字符串常量池、包装类型、自动装箱、自动拆箱、反射、泛型、...

Global site tag (gtag.js) - Google Analytics