C# 继承
C# 继承
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。
继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。
基类和派生类
一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。
C# 中创建派生类的语法如下:
<访问修饰符符> class <基类> { ... } class <派生类> : <基类> { ... }
public static void run() { Pen pen = new Pen(); pen.paint(); MarkerPen markerPen = new MarkerPen(); markerPen.setColor("White"); markerPen.draw(); } class Pen { private String color = "Black"; public void paint() { Console.WriteLine("paint in Black Color."); } public void setColor(String mColor) { color = mColor; } public string getColor() { return color; } } class MarkerPen : Pen { public void draw() { Console.WriteLine($"paint in {getColor()} Color."); } }
paint in Black Color. paint in White Color.
基类的初始化
派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。
下面的程序演示了这点:
public static void run() { Pen pen = new Pen(); pen.paint(); MarkerPen markerPen = new MarkerPen("Cyan"); markerPen.draw(); } class Pen { private String color = "Black"; public Pen() { } public Pen(String c) { color = c; } public void paint() { Console.WriteLine("paint in Black Color."); } public void setColor(String mColor) { color = mColor; } public string getColor() { return color; } } class MarkerPen : Pen { public MarkerPen() { } //用父类构造方法初始化数据 public MarkerPen(String c) : base(c) { } public void draw() { Console.WriteLine($"paint in {getColor()} Color."); } }
C# 多重继承
多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。与单一继承相对,单一继承指一个类别只可以继承自一个父类。
C# 不支持多重继承。但是,可以使用接口来实现多重继承。下面的程序演示了这点:
public static void run() { Pen pen = new Pen(); pen.paint(); MarkerPen markerPen = new MarkerPen("Cyan"); markerPen.draw(); markerPen.drawInSoftHead(); } class Pen { private String color = "Black"; public Pen() { } public Pen(String c) { color = c; } public void paint() { Console.WriteLine("paint in Black Color."); } public void setColor(String mColor) { color = mColor; } public string getColor() { return color; } } //接口 SoftHead class MarkerPen : Pen,SoftHead { public MarkerPen() { } //用父类构造方法初始化数据 public MarkerPen(String c) : base(c) { } public void drawInSoftHead() { Console.WriteLine($"SoftHead draw in {getColor()} Color."); } public void draw() { Console.WriteLine($"paint in {getColor()} Color."); } } public interface SoftHead { void drawInSoftHead(); }