类的继承
- 继承的概念
我们可能会在一些类中,写一些重复的成员(字段,属性,方法),我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类。
Person ----------------------------------- 父类&基类
Student、Teacher、Driver --------- 子类&派生类
object是所有类的基类。 - 子类从父类那里继承过来了什么?
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。 - 子类有没有继承父类的构造函数?
子类并没有继承父类的构造函数。但是,子类会默认的调用父类无参数的构造函数,用于创建父类对象,让子类可以使用父类中的成员。所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,子类就调用不到了。
解决办法: 1)、在父类中重新写一个无参数的构造函数。2)、在子类中显示的调用父类的构造函数,使用关键字:base() - 继承的特性
继承的单根性:一个子类只能有一个父类。
继承的传递性 - new关键字新用法
1)、创建对象
2)、隐藏从父类那里继承过来的同名成员。 (隐藏的后果就是子类调用不到父类的成员) - 类的继承Demo
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 Person(string name, int age, char gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
}
public void CHLSS()
{
Console.WriteLine("吃喝拉撒睡");
}
}
public class Student : Person
{
public Student(string name, int age, char gender, int id)
: base(name, age, gender)
{
this.Id = id;
}
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
public void Study()
{
Console.WriteLine("学生会听课");
}
}
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("老师会讲课");
}
}
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("司机会开车");
}
}