查了很多关于里式转换的概念,都是讲什么子类转父类,父类转子类的内容,把我转懵了。在自己不懈的努力下终于看到了点眉目。里式转换到底是什么东东,看图:
1.父类直接转换为子类——出错:
Person P = new Person();
Student stu = (Student)p;
//stu调用父类方法会报错
2.父类想转换为子类——实例化是关键
Person p = new Student();
Student t = (Student)p;
//父类实例化一个子类,并转化为此子类,实现了父类转化为子类
3.子类间转化——出错:
Person p = new Teacher();
Student stu = (Student)p;
//父类实例化为子类Teacher,子类Teacher转化为子类Student
4.子类转换为父类——转化方式很重要
Teacher t = new Teacher();
Person p = t;
//先实例化子类,再将子类直接转化为父类
深挖一下——纯属个人观点:
看父类位置有没有觉得父类好比是一个中转站,子类不能完成的事通过中转站而完成了,中转站的关键或实现方式就是实例化了,所以为什么不直接用而是用实例化的方法来使用的原因就清楚了吧:一是使中转站的范围更大,能力更强;二是使代码更具有灵活性,不死板,复用率更高了。
每一件事都有它存在的理由,细想一下总会感叹逻辑上它在此处存在的合理性,不禁叫好,设计者往往能打破周围的限制,从而发挥无限的想象去创造。什么时候能突破思维的限制,什么时候就更进一步了……期待吧
至于为什么要有里式转换,要它有何用,我还需要一定的代码量与认知,敬请下回讲解吧。