重写与重载的区别
- 格式:docx
- 大小:16.00 KB
- 文档页数:2
函数重载和覆盖(重写)的区别1、重载:函数重载是指在同⼀作⽤域内(名字空间),可以有⼀组具有相同函数名,不同参数列表的函数;2、覆盖(也叫重写):指在派⽣类中重新对基类中的虚函数(注意是虚函数)重新实现。
即函数名和参数都⼀样,只是函数的实现体不⼀样;3、隐藏:指派⽣类中的函数把基类中相同名字的函数屏蔽掉了,隐藏与另外两个概念表⾯上看来很像,很难区分,其实他们的关键区别就是在多态的实现上。
下⾯那种情形下myfunc函数声明是重载?A. namespace IBM{int myfunc(int a);}namespace SUN{int myfunc(double b);}B. namespace IBM{int myfunc(int a);}namespace SUN{using IBM::myfunc;int myfunc(double b);}C. namespace IBM{int myfunc(int a);namespace SUN{int myfunc(double b);}}D. class A{public:int myfunc(int a);}class SubA: public A{public:int myfunc(double b);}答案是B,A和C都是名字空间不同;D是隐藏,只有B是重载!存在如下声明:void f (); //全局函数class A{public:void f(int);};class B: public A{public:void f(int *);static void f(int **);void test();//...};那么在如下B::test实现中哪⼏个函数调⽤是合法的:void B::test(){int x = 0;int *p = NULL;f(); //(1)f(x); //(2)f(&x); //(3)f(&p); //(4)};A.(1)(2)(3)(4)B.(1)(3)(4)C.(2)(3)(4)D.(3)(4)答案是D,类成员函数重载:局部同名函数将隐藏⽽不是重载全局声明,不引⼊⽗类名字空间时⼦类的同名函数不会和⽗类的构成重载,静态成员函数可以和⾮静态成员函数构成重载。
简述方法的重载与重写
方法的重载与重写是面向对象编程中常见的基本概念。
一、方法的重载
方法重载就是在同一个类中出现同名的两个或多个方法,这时,这些同名方法的参数列表必须不同,例如参数个数不同、参数类型不同或者参数顺序不同则可以实现重载。
重载可以提高程序的效率,可以根据参数的不同,返回不同的结果,避免了程序的冗长。
二、方法的重写
方法重写又叫方法覆写,它是在子类中重新定义父类已经存在的方法,当子类调用重写的方法时,将执行子类的方法,而不再执行父类的方法。
重写可以使子类拥有更复杂的行为,使得子类更具有实用性,解决父类中方法的缺点。
- 1 -。
简述方法的重载与重写重载和重写是Java中两个重要的概念,它们都是面向对象编程中的重要特性。
虽然它们都是在不同的上下文中使用的,但仍然存在一些相似之处。
下面是关于重载和重写的详细说明:重载:重载是指在同一个类中定义多个方法,这些方法具有相同的名称,但参数类型、个数或顺序不同。
重载方法的返回类型可以相同也可以不同。
当调用一个重载方法时,编译器会根据传递给方法的参数类型和数量来确定要调用哪个方法。
重载方法的优点在于可以使用相同的方法名来表示不同的操作,这样可以使代码更加简洁易懂。
例如,一个计算器类可以定义多个add 方法,用于对不同类型的数字进行加法运算。
重写:重写是指在子类中实现一个与父类中已有的方法具有相同名称、参数列表和返回类型的方法。
重写方法的目的是为了改变父类方法的实现,以适应子类的特定需求。
当调用一个重写方法时,实际调用的是子类中的方法,而不是父类中的方法。
重写方法的优点在于可以通过扩展父类的功能来实现子类的特定需求。
例如,一个动物类可以定义一个move方法,而子类可以重写该方法以实现特定类型的动物的移动方式。
总结:重载和重写是Java中两个重要的概念,它们都是面向对象编程中的重要特性。
重载是指在同一个类中定义多个方法,这些方法具有相同的名称,但参数类型、个数或顺序不同。
重写是指在子类中实现一个与父类中已有的方法具有相同名称、参数列表和返回类型的方法。
重载方法的优点在于可以使用相同的方法名来表示不同的操作,这样可以使代码更加简洁易懂。
重写方法的优点在于可以通过扩展父类的功能来实现子类的特定需求。
重写与重载的区别
1、定义上不同。
重载是指不同的函数使⽤相同的函数名,但是函数的参数个数或类型不同,
调⽤的时候根据函数的参数来区别不同的函数。
重写是指在派⽣类中重新对基类中的虚函数重新实现,
即函数名和参数都⼀样,只是函数的实现体不⼀样。
2、规则不同。
重载必须具有不同的参数列表,可以有不同的访问修饰符,可以抛出不同的异常。
重写的参数列表必须完全与被重写的⽅法相同,否则不能称其为重写⽽是重载,其返回的类型也必须⼀直与被重写的⽅法的返回类型相同。
重写⽅法⼀定不能抛出新的检查异常或者⽐被重写⽅法申明更加宽泛的检查型异常。
函数的重载和重写函数的重载和重写是C++中面向对象编程中的重要概念。
这是因为这两个概念可以帮助程序员创建更加灵活和高效的代码,从而提高程序的可重用性和可维护性。
在本文中,我将详细介绍函数的重载和重写,并且适当地比较它们之间的异同点。
函数的重载是指在同一个类中,可以定义多个同名的函数,但每个函数具有不同的参数列表。
通过这种方式,我们可以使用同样的函数名来表示不同的行为,从而简化程序的编写和调用。
1.函数的名称必须相同2.函数的参数列表必须不同3.函数的返回类型可以相同也可以不同下面给出一个简单的例子,展示如何定义重载函数:```cpp// 重载函数的例子#include <iostream>using namespace std;class Demo{public:void print(){cout << "Hello, World!" << endl;}void print(int n){cout << "The number is " << n << endl;}void print(double d){cout << "The number is " << d << endl;}};函数的重写是指子类中的函数可以覆盖父类中的同名函数。
这种行为称为多态,可以让程序具有更加灵活和可扩展的能力。
当父类指针或引用指向子类对象时,调用同名函数会根据指向的对象类型进行动态绑定,即调用子类中的函数。
这个过程称为动态多态。
class Shape{public:virtual void draw(){cout << "This is shape." << endl;}};三、重载与重写的区别函数的重载和重写都可以使程序更加灵活和高效,但是它们之间也存在着显著的区别。
重载与重写
重载就是同⼀个类中或⽗⼦类中,有多个⽅法名相同,但参数列表不同(包括参数个数和参数类型),与返回值⽆关,与权限修饰符也⽆关。
⽽调⽤重载的⽅法时通过传递给它们不同的参数个数和参数类型来决定具体使⽤哪个⽅法,这叫多态。
重写(覆盖)就是⼦类重写基类的⽅法,⽅法名,参数列表和返回值都必须相同,否则就不是重写⽽是重载。
重写最⼤的特点是权限修饰符不能⼩于被重写⽅法的修饰符。
且重写⽅法不能抛出新的异常或者是⽐被重写⽅法声明更加宽泛的检查型异常。
重写必须遵守两同两⼩⼀⼤原则
⽅法名相同,参数类型相同
⼦类返回类型⼩于等于⽗类⽅法返回类型,
⼦类抛出异常⼩于等于⽗类⽅法抛出异常,
⼦类访问权限⼤于等于⽗类⽅法访问权限。
⾯试题解七-java重载和重写的区别重载和重写的区别java中⽅法的重载和重写都是实现多态性的⼀种⽅式,区别在于前者实现多态性是在编译的时候,后者实现多态性是在运⾏的时候。
----重写(Override)----重写的前提是继承,是⼦类对⽗类的⽅法的实现过程进⾏重新编写,⽅法重写参数类型、个数、顺序必须完全⼀致。
重写的主要作⽤在于可以根据⼦类的需要,来特定属于⼦类的特定⾏为,这也是java多态性的⼀种实现⽅式。
例⼦:我们先创建⼀个动物类,该类中有⼀个move⽅法public class Animal {public void move(){System.out.println("动物在跑动");}}我们再创建⼀个猫类,猫类继承动物类并且重写move⽅法public class Cat extends Animal {@Overridepublic void move() {System.out.println("猫可以跑也可以⾛");}}这个⼦类中的move⽅法的⽅法名与⽗类⼀样,⽽且参数都为空,所以作为⼦类的猫类的move⽅法是对⽗类move⽅法的重写public class TestCat {public static void main(String[] args) {Animal a = new Animal();Animal b = new Cat();a.move();//执⾏⽗类animal中的move⽅法b.move();//执⾏⼦类cat中的move⽅法}}输出结果:说明在运⾏的时候,jvm选择了运⾏了特定对象b中重写的move⽅法⽅法重写规则总结⽗类的成员⽅法只能被它的⼦类重写,继承是重写的前提参数列表与被重写⽅法的参数列表必须完全相同访问权限不能⽐⽗类中被重写的⽅法的访问权限更低。
若⽗类的⽅法权限修饰符为public,那么⼦类⽅法重写的修饰符权限不能⽐public⼩(⽐如不能声明为protected)声明为 final 的⽅法不能被重写声明为 static 的⽅法不能被重写,但是能够被再次声明⽗类的构造⽅法,⼦类⽆法对其进⾏重写重写的⽅法能够抛出任何⾮强制异常,⽆论被重写的⽅法是否抛出异常。
Java基础之重载(Overload)与重写(Override)详解⽬录⼀、重载(Overload)⼆、重写(Override)三、重写与重载之间的区别四、总结⼀、重载(Overload)重载是在⼀个类⾥⾯,⽅法名字相同,⽽参数不同。
返回类型可以相同也可以不同。
每个重载的⽅法(或者构造函数)都必须有⼀个独⼀⽆⼆的参数类型列表。
最常⽤的地⽅就是构造器的重载。
重载的好处:1.不⽤为了对不同的参数类型或参数个数,⽽写多个函数。
2.多个函数⽤同⼀个名字,但参数表,即参数的个数或(和)数据类型可以不同,调⽤的时候,虽然⽅法名字相同,但根据参数表可以⾃动调⽤对应的函数。
3.重载的最直接作⽤是⽅便了程序员可以根据不同的参数个数,顺序,类型,⾃动匹配⽅法,减少写过个函数名或⽅法名的重复步骤。
4.增加代码可读性,执⾏同样功能但具有不同参数类型的⽅法应该使⽤同样的名字。
重载规则:1.被重载的⽅法必须改变参数列表(参数个数或类型不⼀样)。
2.被重载的⽅法可以改变返回类型。
3.被重载的⽅法可以改变访问修饰符。
4.被重载的⽅法可以声明新的或更⼴的检查异常。
5.⽅法能够在同⼀个类中或者在⼀个⼦类中被重载。
6.⽆法以返回值类型作为重载函数的区分标准。
歧义调⽤:public class TestMethodOverload {public static double max(double num1,double num2) {if(num1 > num2)return num1;elsereturn num2;}public static int max(int num1,int num2) {if(num1 > num2)return num1;elsereturn num2;}public static void main(String[] args) {System.out.println("The max of 3 and 4 is "+max(3,4));//调⽤max(int num1,int num2)⽅法System.out.println("The max of 3.0 and 4.0 is "+max(3.0,4.0));//调⽤max(double num1,double num2)⽅法System.out.println("The max of 3 and 4.0 is "+max(3,4.0));//调⽤max(double num1,double num2)⽅法,调⽤⽅法时实参值3会转换为double型}}调⽤max(3,4)时为什么不⽤max(double num1,double num2)⽅法呢?调⽤⽅法时,有时会有⼀个或多个可能的匹配,java编译器会寻找最精确匹配的⽅法。
JAVA重写和重载方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
Overloaded的方法是可以改变返回值的类型。
也就是说,重载的返回值类型可以相同也可以不同。
1、重载(Overloading)a、方法重载是让类以统一的方式处理不同类型数据的一种手段。
多个同名函数同时存在,具有不同的参数个数/类型。
重载Overloading是一个类中多态性的一种表现。
b、Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
c 、重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。
无法以返回型别作为重载函数的区分标准。
2、重写(Overriding)a、父类与子类之间的多态性,对父类的函数进行重新定义。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
在Java中子类可继承父类中的方法,而不需要重新编写相同的方法。
但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。
方法重写又称方法覆盖。
b、若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。
如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
this指示当前。
c、子类函数的访问修饰权限不能少于父类的;重写是子类的方法覆盖父类的方法,要求方法名和参数都相同重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数,可以参考API帮助文档看看类的构造方法.构造方法和普通方法都能重载吗?2.构造方法和普通方法都能重写吗?3.重写的话是子类中的方法覆盖同名父类方法?重载的话覆盖是怎样的呢?(多同名方法情况下哪个覆盖哪个?)1 能2 能3 重写是方法名相同,参数也相同,重载是方法名相同,参数不同首先我们来讲讲:重载(Overloading)(1)方法重载是让类以统一的方式处理不同类型数据的一种手段。
方法的重载和重写有什么区别在面向对象编程中,方法的重载(Overload)和重写(Override)是两个重要的概念。
它们都涉及到方法的多态性,但是它们的实现方式和作用有所不同。
本文将从方法的重载和重写两个方面进行详细的介绍和比较,以帮助读者更好地理解它们之间的区别。
首先,我们来看看方法的重载。
方法的重载是指在同一个类中,可以有多个方法名相同但参数列表不同的方法。
也就是说,方法的重载是通过改变方法的参数列表来实现的。
在调用重载方法时,编译器会根据提供的参数类型和数量来确定调用哪个重载方法。
方法的重载可以使代码更加灵活,方便地处理不同类型的输入数据。
例如,我们可以编写一个名为“add”的方法,它可以接受两个整数相加,也可以接受两个浮点数相加,这样就实现了方法的重载。
接下来,我们来讨论方法的重写。
方法的重写是指子类重新定义了父类中已有的方法,使得子类可以根据自己的需要来实现该方法。
在重写方法时,子类必须保持方法名、参数列表和返回类型与父类中的方法一致。
通过方法的重写,子类可以改变父类方法的行为,实现自己特定的功能。
这种特性使得面向对象编程更加灵活和可扩展。
例如,我们可以定义一个名为“draw”的方法,在父类中它只是简单地打印一行文字“Drawing”,而在子类中可以重写这个方法,实现具体的图形绘制功能。
接下来,我们将重点比较方法的重载和重写之间的区别。
首先,方法的重载是在同一个类中实现的,而方法的重写是在父子类之间实现的。
其次,方法的重载是通过改变参数列表来实现的,而方法的重写是通过重新定义方法体来实现的。
另外,方法的重载是编译时多态,而方法的重写是运行时多态。
最后,方法的重载是静态绑定的,而方法的重写是动态绑定的。
总的来说,方法的重载和重写都是面向对象编程中实现多态性的重要手段。
通过方法的重载和重写,我们可以更加灵活地处理不同类型的数据和实现特定的功能。
在实际的编程过程中,我们需要根据具体的需求来选择合适的方法来实现多态性,以提高代码的可读性和可维护性。
重写与重载的区别
1.重写
override是重写了一个方法,以实现不同的功能。
一般是用于子类在继承父类时,重写(重新实现)父类中的方法。
重写(覆盖)的规则:
a)重写方法的参数列表必须完全与被重写的方法的相同,否则不能
称其为重写而是重载.
b)重写方法的访问修饰符一定要大于被重写方法的访问修饰符
(public>protected>default>private)。
c)重写的方法的返回值必须和被重写的方法的返回一致;
d)重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,
或者是其子类;
e)被重写的方法不能为private,否则在其子类中只是新定义了一个
方法,并没s有对其进行重写。
f)静态方法不能被重写为非静态的方法(会编译出错)。
2.重载
overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。
重载的规则:
a)在使用重载时只能通过相同的方法名、不同的参数形式实现。
不
同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
b)不能通过访问权限、返回类型、抛出的异常进行重载;
c)方法的异常类型和数目不会对重载造成影响;
多态的概念比较复杂,有多种意义的多态,一个有趣但不严谨的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。
一般,我们使用多态是为了避免在父类里大量重载引起代码臃肿且难于维护。
3.对比
对两者比较,可以发现多态对重载的优点:
如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;
如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)。