向上转型:父类对象引用指向子类对象
我刚开始学习多态的时候就这一句话把我弄混了,向上转型 不应该是从小到大吗,这个解释是:Animal a = new Dog(); 如果按照上面的那句话理解 就是父类对象的引用a 指向的子类对象; a本来好好的是父类类型, 结果指向了子类,这不是有大的指向小的吗? 这算什么向上转型啊;
直到我这个概念: 向上转型就是把子类对象的引用转换成父类类型,我看到这局话想了一下,觉得很有道理。我对这句话的理解是:a是子类对象的引用 转换成了父类类型 这个解释才合理啊
写这段话的主要目的就是给像我一样在学习多态时有这方面困惑的小伙伴 一个解决办法。
多态这一块举个例子吧
Animal a = new Dog(); 或者Animal a = new Cat();
可以直接a.doSomeThing();//比如叫
所以不需要关心什么动物,直接叫就完事了
这样添加一个动物也不用改a.doSomeThing();的代码
可以看看简单工厂模式这个例子
这东西就算反过来引用也是可以的,只要不要破坏和引用其他内存就行。当然,最常用且正确的还是父类引用子类。但有时候或许有别的需求呢,比如调试,我觉得还要灵活一点理解,理解转换的本质。