多态虚方法与抽象类、接口有何详细区别?

2026-05-08 20:072阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1039个文字,预计阅读时间需要5分钟。

多态虚方法与抽象类、接口有何详细区别?

虚拟方法:在父类方法返回值前加`virtual`关键字,标记为虚拟方法,表示这个方法可以被子类重写。

1. 虚拟方法示例: cpp class Base { public: virtual int method() { return 1; } };

2. 虚拟方法特性: - 虚拟方法必须存在于方法体中,即使方法体为空。 - 子类可以重写虚拟方法,实现特定的行为。

3. 子类重写虚拟方法: cpp class Derived : public Base { public: int method() override { // 实现细节 } };

虚方法:

1、在父类方法的返回值前加 virtual 关键字,标记为虚方法,表示这个方法可以被子类重写。

2、虚方法必须有方法体,方法体中可以没有任何内容。

3、子类可以根据需求选择性的是否重写虚方法。如果需要重写,在子类方法的返回值前加 override 关键字。

4、子类在重写虚方法时,可以根据需求选择性的是否使用 base 关键字调用父类中的该方法。

虚方法语法格式如下:

public class Father { public virtual void Do() { //..... } } public class Son : Father { public override void Do() { base.Do();//选择性的是否调用。 //....代码体 } }

抽象类:

1、在定义类的关键字 class 前面加 abstract 修饰,表示这个类为抽象类。子类继承抽象类后,使用 override 关键字重写父类中的所有抽象方法。

2、抽象类中不一定有抽象方法,但是抽象方法必须存在于抽象类中。抽象方法也需要用 abstract 关键字进行修饰。

3、抽象方法没有方法体,且抽象方法必须在子类中实现。

4、抽象类不能被实例化,但是可以有构造函数。因为抽象类中有抽象方法(无方法体),如果实例化抽象类,那么抽象类的对象调用这些无方法体的抽象方法是没有任何意义的,所以无法实例化。

抽象类以及抽象方法语法格式如下:

public abstract class Father//抽象类 { public abstract void Do();//抽象方法 } public class Son : Father { public override void Do() { //... } }

接口:当抽象类中的所有方法都是抽象方法时,可以用接口的形式来表现。

1、接口使用 interface 关键字定义,没有 class 关键字,接口名一般使用“IXxxx”。

2、接口中不能包含字段,但是可以包含属性(自动属性)。

3、接口中定义的方法不能有方法体,全是抽象方法,但又不需要用 abstract 关键字修饰,因此接口不能被实例化,且不能有构造函数。

多态虚方法与抽象类、接口有何详细区别?

4、接口中的成员不允许添加访问修饰符,默认都是 public。

5、一个类可以实现多个接口,被实现的接口之间用逗号分隔开;一个接口也可以继承多个接口,接口之间也要用逗号分隔;当一个接口实现一个接口时,如果这两个接口中有相同的方法时,可以用 new 关键字隐藏父接口中的方法。

6、继承者必须实现接口中的所有方法。

接口语法格式如下:

interface IFather { void Do(); } interface IMother:IFather { new void Do();//隐藏父接口的同名方法 void Do1(); } public class Son : IFather,IMother { public void Do() { //...... } public void Do1() { //..... } }

以上这篇基于多态之虚方法、抽象类、接口详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

本文共计1039个文字,预计阅读时间需要5分钟。

多态虚方法与抽象类、接口有何详细区别?

虚拟方法:在父类方法返回值前加`virtual`关键字,标记为虚拟方法,表示这个方法可以被子类重写。

1. 虚拟方法示例: cpp class Base { public: virtual int method() { return 1; } };

2. 虚拟方法特性: - 虚拟方法必须存在于方法体中,即使方法体为空。 - 子类可以重写虚拟方法,实现特定的行为。

3. 子类重写虚拟方法: cpp class Derived : public Base { public: int method() override { // 实现细节 } };

虚方法:

1、在父类方法的返回值前加 virtual 关键字,标记为虚方法,表示这个方法可以被子类重写。

2、虚方法必须有方法体,方法体中可以没有任何内容。

3、子类可以根据需求选择性的是否重写虚方法。如果需要重写,在子类方法的返回值前加 override 关键字。

4、子类在重写虚方法时,可以根据需求选择性的是否使用 base 关键字调用父类中的该方法。

虚方法语法格式如下:

public class Father { public virtual void Do() { //..... } } public class Son : Father { public override void Do() { base.Do();//选择性的是否调用。 //....代码体 } }

抽象类:

1、在定义类的关键字 class 前面加 abstract 修饰,表示这个类为抽象类。子类继承抽象类后,使用 override 关键字重写父类中的所有抽象方法。

2、抽象类中不一定有抽象方法,但是抽象方法必须存在于抽象类中。抽象方法也需要用 abstract 关键字进行修饰。

3、抽象方法没有方法体,且抽象方法必须在子类中实现。

4、抽象类不能被实例化,但是可以有构造函数。因为抽象类中有抽象方法(无方法体),如果实例化抽象类,那么抽象类的对象调用这些无方法体的抽象方法是没有任何意义的,所以无法实例化。

抽象类以及抽象方法语法格式如下:

public abstract class Father//抽象类 { public abstract void Do();//抽象方法 } public class Son : Father { public override void Do() { //... } }

接口:当抽象类中的所有方法都是抽象方法时,可以用接口的形式来表现。

1、接口使用 interface 关键字定义,没有 class 关键字,接口名一般使用“IXxxx”。

2、接口中不能包含字段,但是可以包含属性(自动属性)。

3、接口中定义的方法不能有方法体,全是抽象方法,但又不需要用 abstract 关键字修饰,因此接口不能被实例化,且不能有构造函数。

多态虚方法与抽象类、接口有何详细区别?

4、接口中的成员不允许添加访问修饰符,默认都是 public。

5、一个类可以实现多个接口,被实现的接口之间用逗号分隔开;一个接口也可以继承多个接口,接口之间也要用逗号分隔;当一个接口实现一个接口时,如果这两个接口中有相同的方法时,可以用 new 关键字隐藏父接口中的方法。

6、继承者必须实现接口中的所有方法。

接口语法格式如下:

interface IFather { void Do(); } interface IMother:IFather { new void Do();//隐藏父接口的同名方法 void Do1(); } public class Son : IFather,IMother { public void Do() { //...... } public void Do1() { //..... } }

以上这篇基于多态之虚方法、抽象类、接口详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。