Java多态理解:
这几天学习到多态,就和python里面的感觉有挺多不一样,开始一直不理解,翻了好几个文章,都没能理解这句话:当使用多态调用方法时,首先检查父类是否有该方法,如果没有则编译错误,如果有,就去调用子类同名方法。
今天终于在Head First Java上面找到灵感了。
首先看多态存在的必要条件:
-
继承
-
重写 (子类重写父类方法,签名必须相同)
-
父类引用指向子类对象:
Parent p = new Child();
第三条说Parent p
是父类的引用,new Child()
是子类对象。我们知道对象的引用是放在栈中的,真正的对象存放在堆中。通过引用可以操作这个对象,那么,重点来啦!!!
我们可以把引用当作遥控器,把真正的对象当作电视,通过遥控器控制电视。
接着就是根据父类引用指向子类对象:Parent p = new Child();
。假设父类是第一代电视机,子类是第二代电视机。那么他们对象的引用分别是第一代遥控器和第二代遥控器
Parent p = new Child();
的意思就是用第一代遥控器控制第二代电视!!!
-
当使用多态调用方法时,首先检查父类是否有该方法,如果没有则编译错误
即第一代遥控器本身为第一代电视设计,肯定没有控制音量大小的按键,你如果硬要改变音量肯定报错。
2. 后半句话:如果有,就去调用子类同名方法。
两种遥控器都有增强画质按键,用第一代控制器控制第二代电视机增强画质,肯定是变成蓝光!