一,继承是C#中面向对象的特性之一。
继承,简单一句话就是建立类之间的关系,实现代码的重用性,方便系统扩展。继承的两大特性是单根性和传递性。
1》继承的单根性:是指子类只能继承一个父类,不能同时继承多个父类。就好比儿子只能有一个父亲(亲生),派生类只能从一个类中继承,继承不支持多重继承。避免代码结构的复杂性。
2》派生类(子类)继承的共同基类(父类)可以让代码更简洁明了,可扩展性和可维护性好
3》类Object是 .NET Framework 中所有类、结构、枚举和委托的最终基类,因为 .NET Framework 中的所有类均从 Object 派生,所以 Object 类中定义的每个方法可用于系统中的所有对象。 派生类也可以重写这些方法中的某些。
而接口是允许多继承。
如下:
由上图可看出继承的单根性,不允许多继承
而接口则编译通过的,允许多继承
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JiCheng { interface A { } interface B { } interface C : A, B { } }
2》继承的传递性:派生类是从基类那里继承特性,派生类也可以作为其他类的基类。从一个基类派生出多层类,这样就形成类层次结构。就是ClassA继承ClassB。ClassA可以调用ClassB的方法和属性,但是ClassB又继承了ClassC所有ClassA也可以调用ClassC的方法和属性。
如下继承的传递性:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JiCheng { class ClassA { } class ClassB : ClassA { } class ClassC : ClassB { } }
3>继承子类被实例化的时候,父类也会被实例化(构造函数初始化),如下
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JiCheng { class ClassA { public ClassA() { Console.WriteLine("ClassA"); } } class ClassB : ClassA { public string B = "ClassB"; public ClassB() { Console.WriteLine(B); } } class ClassC : ClassB { public ClassC() { Console.WriteLine("ClassC"); } } class ClassD : ClassA { public ClassD() { Console.WriteLine("ClassD"); } } }
实现
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace JiCheng { class Program { static void Main(string[] args) { ClassC c = new ClassC(); ClassD d = new ClassD(); Console.ReadKey(); } } }
结果显示:
综上:子类继承父类,父类会被实例化(初始化构造函数)