里氏替换原则→类型转换

Person是父类,Student是子类

1,当需要一个父类类型对象的时候可以给一个子类对象

例如:

public  void  Show(Person  p)

{

}

Student  stu=new Student();

Show(stu);//这里是把子类的对象stu隐式转换成父类

当需要一个子类类型对象的时候给一个父类类行的对象是不可以的

例如:

Public  void  Show(Student  stu)

{

}

person   p=new  Person();

Show(p);//在这里是不能这样用的因为父类不能转换成子类

可以这样写Person  p=new Student();

Student   st=(Student)p;//这里是把父类强转成子类。因为父类的对象就是指向这个子类所以可以强砖不会报错

Show(st);//这时候st就是Student的类型的一个对象

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

1,把子类型赋值给父类型是发生了隐式转换

Student  stu=new Student();

Person   p=stu;//这里就是把子类型赋值给父类型的对象stu发生了隐式转换

2,把父类类型赋值给子类需要显示转换而前提是父类的一个对象是指向子类的一个对象这样就可以转换成功否则会报错

例如:

 Person   p=new Student();//这里是父类的对象就是指向子类的对象

Student  stu=(Student)p;//这里就是把父类的对象P显示转换成子类因为父类的对象就是指向子类的一个对象

判断一个对象是否属于某个类型语法:

if(stu  is  person)

{

}

也可以通过as进行转换

Person  p=new Person();

 Student  stu=p   as   Student;//如果能转换则回返回结果不能转换则返回null;而这里是不能转换的因为父类不能转换成子类,并且父类的对象也不是指向子类的一个对象

原文地址:https://www.cnblogs.com/lixiang0829/p/2630511.html