继承
我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类。
单独的封装到一个类中,作为这些类的父类。
Student、Teacher、Driver 子类 派生类
Person 父类 基类
子类继承了父类,那么子类从父类那里继承过来了什么?
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
问题:子类有没有继承父类的构造函数?
答:没有,但是子类会默认的调用父类无参数的构造函数,创建父类对象,让子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,无参数的构造函数就被替掉了。
子类就调用不到了,所以子类会报错。
解决办法:
1.在父类中重新写一个无参数的构造函数。
2.在子类中显示的调用父类的构造函数,使用关键字: base()
继承的特性
1.继承的单根性:一个子类只能继承一个父类
2.继承的传递性
object是所有类的基类。
using System;
namespace 继承
{
class Program
{
static void Main(string[] args)
{
Student s = new Student("张三", 12, '男', 103);
//s.Age = 12;
// Teacher t = new Teacher();
// t.Gender = '男';
// Driver d = new Driver();
// d.Name = "张三";
s.SayHello();
}
}
public class Person
{
private string _name;
public string Name
{
get => _name;
set => _name = value;
}
private int _age;
public int Age
{
get => _age;
set => _age = value;
}
private char _gender;
public char Gender
{
get => _gender;
set => _gender = value;
}
public Person(string name, int age, char gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
}
// public Person()
// {
//
// }
}
public class Student : Person
{
private int _id;
public int Id
{
get => _id;
set => _id = value;
}
public Student(string name, int age, char gender, int id) : base(name, age, gender)
{
this.Id = id;
}
public void SayHello()
{
Console.WriteLine("我叫{0},今年{1},我是{2}生,学生id是{3}",Name,Age,Gender,Id);
}
}
public class Teacher // : Person
{
private int _salary;
public int Salary
{
get => _salary;
set => _salary = value;
}
}
public class Driver //: Person
{
private int _driveTime;
public int DriveTime
{
get => _driveTime;
set => _driveTime = value;
}
}
}