使用抽象类和接口实现多继承的 C# 程序
给定多重继承,现在我们的任务是借助抽象类和接口来实现多重继承。所以,在实现之前,我们首先了解多继承、抽象类和接口的基本定义。
多重继承:多重继承是面向对象的编程语言(如 C#、C++ 等)中遵循的一种继承。在这种特定的继承中,一个类继承多个父类的属性。例如,在给定的图中,基类继承自两个基类,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