你的位置:首页 > ASP.net教程

[ASP.net教程]C# 面向对象——继承


继承:代码文字结合理解

class Program  {    static void Main(string[] args)    {      //Student s = new Student();      //Driver d = new Driver();      Student s = new Student("学生", 18, '男', 101);    }  }  /// <summary>  /// 父类——人类  /// </summary>  public class Person  {    private string _name;    public string Name    {      get { return _name; }      set { _name = value; }    }    private int _age;    public int Age    {      get { return _age; }      set { _age = value; }    }    private char _gender;    public char Gender    {      get { return _gender; }      set { _gender = value; }    }    public void CHLSS()    {      Console.WriteLine("吃喝拉撒睡");    }    public Person(string name, int age, char gender)    {      this.Name = name;      this.Age = age;      this.Gender = gender;    }    public Person()    {    }  }  /// <summary>  /// 子类——学生  /// </summary>  public class Student : Person  {    public Student(string name, int age, char gender, int id)      : base(name, age, gender)    {      //this.Name = name;      //this.Age = age;      //this.Gender = gender;      this.Id = id;    }    private int _id;    public int Id    {      get { return _id; }      set { _id = value; }    }    public void Study()    {      Console.WriteLine("学生会学习");    }  }  /// <summary>  /// 子类——老师  /// </summary>  public class Teacher :Person  {    public Teacher(string name, int age, char gender, double salary)      : base(name, age, gender)    {      this.Salary = salary;    }    private double _salary;    public double Salary    {      get { return _salary; }      set { _salary = value; }    }    public void Teach()    {      Console.WriteLine("老师会讲课");    }  }  /// <summary>  /// 子类——司机  /// </summary>  public class Driver:Person  {    public Driver(string name, int age, char gender, int driveTime)      : base(name, age, gender)    {      this.DirveTime = driveTime;    }    private int _dirveTime;    public int DirveTime    {      get { return _dirveTime; }      set { _dirveTime = value; }    }    public void Drive()    {      Console.WriteLine("司机会开车");    }  }

我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,
单独的封装到一个类中,作为这些类的父类。
Student、Teacher、Driver 子类 或 派生类
Person 父类  或  基类
问题:子类继承了父类,那么子类从父类那里继承过来了什么?
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
问题:子类有没有继承父类的构造函数?
答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,
创建父类对象,子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,
子类就调用不到了,所以子类会报错。
解决办法:
1)、在父类中重新写一个无参数的构造函数。
2)、在子类中显示的调用父类的构造函数,使用关键字:base()

 注意:子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。

里氏转换
1)、子类可以赋值给父类
2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。

 

is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null