继承(是指类与类之间的关系)
如何判断一个继承关系是否合理 子类 is a 父类
Base Class 基类 Parent Class 父类
Derived Class 派生类 Child Class 子类
为什么要继承?继承带给我们的好处?
代码重用
LSP里氏替换原则、多态。(程序的可扩展性、灵活性)方法重写override。
子类继承父类的属性和方法,使创建子类变得很简单,实现了代码重用、以及多态。
类的单根继承性、传递性、继承时构造函数的问题。
所有的类都直接或间接的继承自object。查看IL代码。
访问修饰符
1.当写好一个类以后,默认会存在一个没有参数的构造函数(即便我们不写构造函数,也会存在这么一个无参的构造函数)
2. 当手动添加一个构造函数以后,会将默认的无参数的构造函数覆盖掉。
3.类的构造函数是不能被继承的。只能在子类中去调用父类的构造函数。
Virtual 实现多态的一种手段
//继承----多态(virtual方法实现)
//步骤 父类中 写成虚方法(virtual) 子类中重写(override)
Person 类
public string Name
{set;get;}
public int Age
{set;get;}
public string Gender
{set;get;}
public virtual void ShowNationlity() //标记为虚方法 方便以后重写
{
Console.WriteLine("地球");
}
Chinses类
class Chinese:Person
{
public string HuKou
{set;get;}
public override void ShowNationlity()
{
Console.WriteLine("中国");
}
}
American类
class American;Person
{
public override void ShowNationlity()
{
Console.WriteLine("美国")
}
}
Korean类
class korean : Person
{
public override void ShowNationlity()
{
Console.WriteLine("韩国");
}
}
Main方法
Chinese cn1=new Chinese();
Chinese cn2=new Chinese();
American us1 = new American();
American us2 = new American();
Korean kr1=new Korean();
//声明一个父类的变量p1,指向了一个子类类型的"对象"
//Person p1=cn1; //为什么要这样写?/=====多态
//======探究一下多态===
Person[] pers=new Person[5];
pers[0]=cn1; //Chinese
pers[1]=cn2; //Chinese
pers[2]=us1; //American
pers[3]=us2; //American
pers[4]=kr1;
for(int i=0;i<pers.Length;i++)
{
#region 旧的方式
//循环输出每个人的国籍信息
//pers[i].ShowNationlity();
//需要根据实际存储的类型来进行类型转换
if(pers[i] is Chinese) //判断某个对象是否为某个类型.对象 is 类型
{
//将pers[i] 显示转换为Chinese类型然后 调用 ShowNationlity方法
((Chinese)pers[i]).ShowNationlity();
}
else if(pers[i] is American)
{
((American)pers[i]).ShowNationlity();
}
else if(pers[i] is Korean)
{
((Korean)pers[i]).ShowNationlity();
}
#endregion
//新方法
//这句代码体现出多态
pers[i].ShowNationlity();
}