📜  使用抽象类和接口实现多继承的 C# 程序

📅  最后修改于: 2022-05-13 01:54:46.442000             🧑  作者: Mango

使用抽象类和接口实现多继承的 C# 程序

给定多重继承,现在我们的任务是借助抽象类和接口来实现多重继承。所以,在实现之前,我们首先了解多继承、抽象类和接口的基本定义。

多重继承:多重继承是面向对象的编程语言(如 C#、C++ 等)中遵循的一种继承。在这种特定的继承中,一个类继承多个父类的属性。例如,在给定的图中,基类继承自两个基类,Parent 1 和 Parent 2。

图:Base 继承 Parent 1 和 Parent 2

抽象类:为了理解抽象类,让我们首先了解什么是C#中的抽象。 C# 中的抽象是向外界表示唯一必要信息的过程。简单来说,在这个过程中,背景细节是隐藏的,只有功能对外界可见。

现在我们了解了抽象,让我们回到主题抽象类。 C#中的抽象类是在C#中实现抽象的途径。抽象类不能直接实例化。这个类必须至少有一个抽象方法。在程序中使用抽象类的目的是为派生类提供一个蓝图,并设置一些派生类必须实现的参数。

接口:一个 接口类似于 C# 中的类。但与类不同,接口必须只有其成员的声明(或原型)。

  • 接口表示一个类必须做什么以及如何做。
  • 接口中不能有任何私有成员。
  • Interface 的所有成员都是公共的和抽象的(默认情况下)。
  • 要定义接口,我们必须使用关键字“interface”。
  • 字段不能提供给接口,因为它们代表数据的特定实现。
  • 在接口的帮助下,多重继承成为可能。

现在我们通过一个示例学习如何使用抽象类和接口实现多重继承:

示例:在这个程序中,我们创建了一个抽象类myAbstractClass和一个接口myInterfaceClass,以及两个父类myClass1、myClass2。我们在 myClass1 类中重写抽象方法 print1() 并将接口 myInterfaceClass 的 print2() 实现到 myClass2 类中。之后,我们创建了一个子类 myClass3,现在我们继承了 myClass1 类和 myInterfaceClass 接口。在 myClass3 类中,我们创建了 myClass1 和 myClass2 类的对象,在这里我们又定义了两个方法 print1()、print2(),并在 myClass3 的 print1() 方法中调用了 myClass1 类的 print1(),并调用了 print2() myClass3 的 print2() 方法中的 myClass2 类。 Main() 方法是任何程序的起源。现在我们创建了 myClass3 类的对象 myObject 并调用了 print1() 和 print2(),它们将在控制台屏幕上显示消息作为输出。

C#
// C# program to implement multiple inheritance
// using abstract class and interface
using System;
 
// Defining an abstract class
abstract class myAbstractClass
{
     
    // Method Declaration
    public abstract void print1();
}
 
// Parent class
class myClass1 : myAbstractClass
{
     
    // Overriding print1() method of myAbstractClass
    public override void print1()
    {
        Console.WriteLine("print1() called");
    }
}
 
interface myInterfaceClass
{
     
    // Method Declaration
    void print2();
}
 
// Another Parent class
class myClass2 : myInterfaceClass
{
    public void print2()
    {
        Console.WriteLine("print2() called");
    }
}
 
// Base class
class myClass3 : myClass1, myInterfaceClass
{
    myClass1 S1 = new myClass1();
    myClass2 S2 = new myClass2();
 
    // Overriding print1() method of myAbstractClass
    public override void print1()
    {
        S1.print1();
    }
     
    public void print2()
    {
        S2.print2();
    }
}
 
// Driver code
class GFG{
 
static public void Main()
{
     
    // Instantiate an object of myClass3
      myClass3 myObject = new myClass3();
 
    myObject.print1();
    myObject.print2();
}
}


输出
print1() called
print2() called