昨天和老师讨论了很久Java多态中重写和重载的问题。因为刚开始学,很多内容容易混淆。
似懂非懂是不行滴!! 于是写了个小栗子 来区分重写和重载两者的作用时间以及静态方法无法被重写等特征~
首先,重要的两点:
- 重写:多态判定使用哪个重写的方法是在代码 运行 时做出。
- 重载:根据参数决定调用哪个方法是在代码 编译 时做出。
于是,上面两点可以解释为什么重写和重载同时存在时,两者相互不会影响。也解释了父类在指向子类之后,对象调用方法则会自动调用子类的方法:b.print输出Son。
接下来就是,子类无法重写父类的静态方法啦。图中的show方法在Grandson中修改后被c调用,但结果依然是父类中的I cannot be overrided.
类似静态方法,父类中的final方法和private 修饰的方法也无法被重写噢!
中的父类也写了int num和静态int age,两者在Grandson中也进行了修改。我们发现在运行之后,c调用的结果仍然是父类中的10和20,并未收到修改的影响。那么这种父类中的field variable 应该也是无法被重写的~(这个点是我自己写代码品出来的,还不太确定专业上要怎样解释(T▽T))
最后记住,继承是多态的基础!!!
没有继承的话多态啥也不是啦!
今日学习笔记完结 撒花撒花