java的重写、重载、覆盖的区别

多态性

通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性

重载

每个类型成员都有一个唯一的签名。方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成。只要签名不同,就可以在一种类型内定义具有相同名称的多种方法。当定义两种或多种具有相同名称的方法时,就称作重载。即重载时相同名称成员的参数列表是不相同的(参数顺序和类型)。

继承,重写和隐藏成员 (重写 = 覆盖)

派生的类型继承其基本类型的所有成员;也就是说,这些成员是在派生类型之上定义的,并可用于派生类型。继承成员的行为和质量可以通过以下两种方式来修改:

1、派生类型可通过使用相同的签名定义一个新成员,从而隐藏继承的成员。将先前的公共成员变成私有成员,或者为标记为 final 的继承方法定义新行为时,可以采取这种方法。

2、派生类型可以重写继承的虚方法。重写方法提供了对方法的一种新定义,将根据运行时的值的类型,而不是编译时已知的变量类型来调用方法。只有当虚方法没有标记为 final 且新方法至少可以像虚方法一样进行访问的情况下,成员才能重写虚方法。

方法名,参数相同形成重写,重写的方法不能降低原方法的"可见度",也不能改变原方法的返回值类型。

方法名相同,参数不同(个数、类型)形成重载,重载的方法可看成一个全新的方法,与原方法相比它可以有不同的"可见度"和“返回值类型”。如下例:

class A {

protected int method1(int a, int b) { return 0; }

}

public class B extends A{

public int method1(int a, int b) { return 0; } //正确,重写父类方法,可以扩大访问权限

//private int method1(int a, int b) { return 0; } //错误,重写父类方法,不能降低了访问权限

//private long method1(int a, int b) { return 0; } //错误,重写父类方法,不能改变返回值类型

public short method1(int a, long b) { return 0; }//正确,重载自身的方法,可以有不同的访问权限和返回值类型

private int method1(int a, long b) { return 0; }//正确,重载自身的方法,可以有不同的访问权限和返回值类型

}

但这里 方法public short method1(int a, long b) { return 0; }和 方法private int method1(int a, long b) { return 0; }不能同时存在,因为在同一类中,不允许存在相同名字和参数类型的方法(重写的方法)。

时间: 2024-10-22 23:53:42

java的重写、重载、覆盖的区别的相关文章

C#构造函数问题,重载,重写,覆盖的区别

在C#当中,程序员写的每一个类在没写其它构造函数的情况下,都会默认有一个无参构造函数. 代码如下: class DemoClass { public string Name { set; get; } } DemoClass demoOb = new DemoClass(); 如果程序员写了其它的构造函数,那类本身默认的无参构造函数会自动消失,所以更谈不上构造函数重载. 代码如下: class DemoClass { public string Name { set; get; } //添加一个

C#中的重写和覆盖的区别

#中重写(override)和覆盖(new)的区别 重写用关键字 virtual 修饰的方法,叫虚方法.可以在子类中用override 声明同名的方法,这叫“重写”.相应的没有用virtual修饰的方法,我们叫它实方法.重写会改变父类方法的功能.看下面演示代码:#region 重写 public class C1{    public virtual string GetName()    {        return "徐明祥";    }} public class C2 : C

java中重写、覆盖,重载三者的区别

具体区别有人罗列为: 重写(override)又名覆盖: 1.不能存在同一个类中,在继承或实现关系的类中: 2. 名相同,参数列表相同,方法返回值相同, 3.子类方法的访问修饰符要大于父类的. 4.子类的检查异常类型要小于父类的检查异常. 重载(overload) 1.可以在一个类中也可以在继承关系的类中: 2.名相同: 3.参数列表不同(个数,顺序,类型) 和方法的返回值类型无关. 又有人更加简化为: 重写就是再写一遍,重载就是再加一个.

java函数重写/重载

1.重载: (1)同名函数 (2)不同参数列表:(数目,类型,类型顺序): //函数构成重载,则返回值类型可以不同:如果不重载,返回值类型不同,则会报错: 2.重写:子类重写一个和父类一模一样的方法,来覆盖从父类继承来的方法:子类中的方法修饰范围可以大于父类: 3.递归调用:一种特殊的函数多级调用:函数自己调用自己: 一般操作:(1)找规律:(2)找出口: public class Dg { public static void main(String[] args) { int num = d

Java中的Overload(重载)与Override(重写、覆盖)

java中的方法重载发生在同一个类中两个或者多个方法的方法名相同但是参数不同的情况,方法重载是指子类与父类之间子类重新定义了父类的方法,重写的方法与原方法签名.返回值.参数完全相同.Overload(重载) 重载Overload是一个类中多态性的一种表现,是编译时的多态性.方法重载是让类以统一的方式处理不同类型数据的一种手段.重载发生在同一个类中.同名的方法如果有不同的参数列表(参数个数.类型)则视为重载. java方法的重载,就是可以在类中创建多个方法,这些方法具有相同的名字,但具有不同的参数

C++中重载、重写(覆盖)和隐藏的区别实例分析

这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计来说是非常重要的概念.具体分析如下: 1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 示例代码如下: class A{ public: void test(int

Java 方法重载,方法重写(覆盖),继承等细节注意

1.方法重载(method overload)的具体规范 如果有两个方法的方法名相同,但参数不一致,那么可以说一个方法是另一个方法的重载. 一.方法名一定要相同. 二.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体. 1.如果参数个数不同,就不管它的参数类型了! 2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同. 三.方法的返回类型.修饰符可以相同,也可不同. 四.main方法也可以被重载 方法重载的作用:可以一个相同的方法传入不同的参数以达到想要的结果 2.方法继承

JAVA 重载,重写(覆盖)个人理解

重载,一个java类里有多个同名的方法,但参数列表不同,见下面代码: public class Caller {     /**      * 喊叫      *       * @param callMan      *            呼喊者      * @param callContent      *            呼喊内容      */     public void call(String callMan, String callContent) {        

重载和重写(覆盖)的区别

重写方法的规则如下: 1. 参数列表:必须与被重写方法的参数列表完全匹配. 2. 返回类型:必须与超类中被重写的方法中声明的返回类型或子类型完全相同 3. 访问级别:一定不能比被重写方法强,可以比被重写方法的弱. 4. 非检查异常:重写方法可以抛出任何非检查的异常,无论被重写方法是否声明了该异常. 5. 检查异常:重写方法一定不能抛出新的检查异常,或比被重写方法声明的检查异常更广的检查异常 6. 不能重写标志为final,static的方法 重载方法的规则: 1. 参数列表:被重载的方法必须改变

重载-重写(覆盖)-隐藏的区别

重载和重写搞的差不多了,隐藏有有点混乱了,在此记一下,留作后看 成员函数被重载的特征(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:(4)virtual 关键字可有可无.重写(覆盖)是指派生类函数覆盖基类函数,--这是c++多态的标志,虚函数赋零则变成虚基类(纯粹的接口申明类),特征是(1)不同的范围(分别位于派生类与基类):(2)函数名字相同:(3)参数相同:(4)基类函数必须有virtual 关键字.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下(1)如果派