C# 关于类的继承的总结
1、父类和子类(基类和派生类)
在类的继承中,被继承的类叫做基类(与派生类并提)或父类(与子类并提),继承的类叫做派生类或子类。子类继承父类的属性、方法等,但子类没有继承父类的私有(private)字段。
public class Person
{
public string _name;
private int _age;
public void SayHello()
{
Console.WriteLine("大家好,我是{0},我是人类", _name);
}
}
public class Student:Person
{
}
class Program
{
static void Main(string[] args)
{
Student stu = new Student();
stu._name = "李明";
stu.SayHello();//输出:大家好,我是李明,我是人类
Console.ReadKey();
}
}
子类对象无法访问父类私有字段:
2、继承的特性
-
单根性
子类只能继承一个父类,但一个父类可以有多个子类。所以C#不支持多重继承
-
传递性
继承是可以传递的。子类不仅继承父类中声明的成员,也继承父类的父类中的声明成员。
public class ancestor { public char _gender; } public class parent:ancestor { public string _name; } public class child:parent { } class Program { static void Main(string[] args) { child ch = new child(); ch._name = "李华"; ch._gender = '女'; } }
-
自动隐藏性
如果子类与父类存在相同的函数名,父类会自动隐藏该函数。因此子类调用与父类相同函数名的函数时,调用的是子类或者说是自己的函数。
public class Person { public void SayHello() { Console.WriteLine("大家好,我是人类"); } } public class Student:Person { //如果有意隐藏,请使用关键字 new public new void SayHello() { Console.WriteLine("大家好,我是学生类"); } } class Program { static void Main(string[] args) { Student stu = new Student(); stu.SayHello();//输出:大家好,我是学生类 Console.ReadKey(); } }
new的两个作用: 1、创建类的对象 2、隐藏从父类继承的同名成员,隐藏后子类调用不到父类成员
3、调用父类的构造函数
子类没有继承父类的构造函数,但子类默认会调用父类无参数的构造函数。调用父类无参构造函数是为了创建父类对象,让子类可以使用父类中的成员。
如果在父类写一个有参构造函数,子类无法调用无参数构造函数,会报错。
解决办法:
-
在父类重新写一个无参数的构造函数
public class Person { public string _name; public int _age; public Person() { } public Person(string name, int age) { _name = name; _age = age; } } public class Student:Person { } class Program { static void Main(string[] args) { Student stu = new Student(); stu._name = "李华"; stu._age = 18; Console.ReadKey(); } }
-
在子类中使用关键字【base】显示调用父类构造函数
public class Person { public string _name; public int _age; public Person(string name, int age) { _name = name; _age = age; } } public class Student:Person { public Student(string name, int age):base(name, age) { } } class Program { static void Main(string[] args) { Student stu = new Student("李华", 18); Console.ReadKey(); } }
因为作者精力有限,文章中难免出现一些错漏,敬请广大专家和网友批评、指正。