继承是面向对象程序设计的重要概念之一,先对继承进行综述。
1.继承的作用:
1)继承允许我们根据一个类来定义另一个类;这使得创建维护应用程序变得更加容易,同事也更有利于重用代码和节省开发时间;
2)继承后子类(派生类)拥有父类(基类)的一切属性(属性、方法、事件);继承实现了更大规模(类级别)的代码复用。
2.父类和子类的构造过程:
1)构造派生类时会先构造基类;也就是说调用派生类构造函数时会先调用基类的构造函数;
2)可以使用base关键字调用基类的构造函数;
3)如果没有调用基类构造函数,将会隐式调用基类无参构造函数。
3.成员访问:
1)访问成员时只看变量的数据类型而不是看实例有没有这个成员;
2)如果先实例一个派生类,再赋值给基类,修改一个值时两个值都会改变,因为调用了同一个实例对象;
3)派生类中允许定义与父类同名的变量;
4)在类的内部可以用this和base区分访问的是当前类成员还是基类成员。
4.继承的转化:
1)派生类转化为基类(隐式转换)
2)基类转化为派生类(显式转换)
下面用简单的例子来了解继承,程序如下:
class Human
{
public string name;
public int age;
public Human(string name, int age)
{
this.name = name;
this.age = age;
Console.WriteLine("我的名字是:{0}今年{1}岁。", name, age);
}
public Human()
{
}
public void Eat()
{
Console.WriteLine("吃饭");
}
}
class Woman : Human
{
public Woman()
{
//因为没有参数会默认调用基类无参构造函数
Console.WriteLine("派生类Woman构造函数");
}
public void Shopping()
{
Console.WriteLine("我擅长购物");
}
}
class Man : Human
{
public Man(string name, int age) : base(name, age)
{
//调用基类的构造函数
Console.WriteLine("派生类Man构造函数");
}
public void Programming()
{
Console.WriteLine("我擅长写代码");
}
}
class Program
{
static void Main(string[] args)
{
//转换
Human human1 = new Human();//调用无参构造函数
Human human2 = new Man("Jack", 18);//隐式转换
human2.Eat();
Woman woman = human1 as Woman;//调用无参构造函数
Man man = new Man("Dave", 20);
man.Eat();
Console.ReadKey();
}
}
5.继承特性总结:
1)继承可以通过base访问父类内容,用this和base可以区分派生类和基类重名的变量或者方法;
2)如果基类派生类有相同的方法,实例的是谁就会调用那个类中的方法。