您的位置:首页 > 其它

重载,重写以及多态

2017-12-10 21:09 190 查看

重写

override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。

重写(覆盖)的规则:

1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.

2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。

3、重写的方法的返回值必须和被重写的方法的返回一致;

4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;

5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。

6、静态方法不能被重写为非静态的方法(会编译出错)。

重载

overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。

重载的规则:

1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);

2、不能通过访问权限、返回类型、抛出的异常进行重载;

3、方法的异常类型和数目不会对重载造成影响;

重载和覆盖的区别

1. 重载要求函数名相同,但是参数列表必须不同,返回值可以相同也可以不同。

    覆盖要求函数名、参数列表、返回值必须相同。

2. 在类中重载是同一个类中不同成员函数之间的关系

     在类中覆盖则是子类和基类之间不同成员函数之间的关系

3. 重载函数的调用是根据参数列表来决定调用哪一个函数

     覆盖函数的调用是根据对象类型的不同决定调用哪一个

4. 在类中对成员函数重载是不能够实现多态

    在子类中对基类虚函数的覆盖可以实现多态

多态

多态即多种形式,多态性是指一般类中定义的属性或服务被特殊类继承后,可以具有不同的数据类型或表现出不同的行为,通常是使用重载和重写两项技术来实现的。

多态分为通用多态和特定多态,通用多态有包括参数多态和包含多态(覆盖),特定多态有包括过载多态(重载)和强制多态

过载多态(重载):描述一个函数名称有多种不同实现方式,通常可以在编译时机遇类型签名来区分各个重载函数的名称。代码如下

class OverLoader
{
public void test(int x);
public void test(int x,double y);
public void test(string x);
}


包含多态(覆盖):是重载的一种特殊情况,只发生存在父类和子类这一类关系中。注:通常签名相同,内容不一样。

class Parent
{
public void test(int x);
}

class Child extexts Parent
{
public void test(int x);
}


强制多态:声明为一种类型,但实际上却可以包含另一种类型数值的变量

Parent p = new Child();


参数多态(泛型):它提供一种创建通用工具的方法,可以在特定的场合将其特化。

template <class T> T max(T a,T b)
{
if(a<b)
{
return b;
}
else
{
return a;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: