现象上的继承
class Program
{
static void Main(string[] args)
{
Car car = new Car();
Type name = typeof(Car);
Type fName = name.BaseType;
Type GFName = fName.BaseType;
Console.WriteLine(name.FullName);
Console.WriteLine(fName);
Console.WriteLine(GFName);
Console.WriteLine(car is Object);
}
}
class Vehicle
{
}
class Car : Vehicle
{
}
单根的
- 所有类的父类只能有一个,
-
is a 是一个
从语义上说,子类实例必然是父类实例
Console.WriteLine(car is Object);
但是相反则不可。举个例子,一个汽车必然是交通工具,但一个交通工具不一定是汽车
小知识点
- sealed 结扎类,无法被继承
- 子类的访问权限不能超越父类
public>internal
- 类成员的访问权限不能超越类
本质上的继承
定义:完整继承父类已有的成员(构造函数和析构函数除外),对成员进行横向和纵向的拓展
- 横向上:增加成员数量
- 纵向上:重写,覆盖等,多态性
调用顺序
父类的构造函数->子类的构造函数
类成员的访问级别
public
protected
internal
private
protected internal两者为或的关系
base
class Vehicle
{
private string _owner;
public Vehicle()
{
this.Owner = "M";
}
public string Owner { get; set; }
}
class Car : Vehicle
{
public Car()
{
this.Owner = "LIU";
}
public void ShowOwner()
{
Console.WriteLine(base.Owner); //base只能访问上一级父类的成员
}
}
public Student(int age,string name,int id) :base(age,name)
{
this.Id = id;
}