这篇文章将带大家理解方法重写与重载之间的区别及其和多态的关系.
今天在和别人聊天时聊到了java的重写和重载,发现自己理解的不够深入,于是有了这篇文章.
重载(Overloading)和重写(Overriding)是java中较重要的概念.我们在程序中总是能碰到他们.
这两个概念在我刚学java的时候容易搞混.
重载是指函数或者方法名称相同,但是参数列表不相同.
重写是指在子类与父类中具有名称,参数列表相同的方法. 当我们使用多态获取子类中的该方法时会覆盖基类中的该方法.
借网图一张
_____________________________________________________________________________________________________
上面都是老生常谈.咱们接着说.
重载和重写,我们需要明确的:
1.重载是编译期的概念,在编译时根据参数变量的类型判断应该调用哪个方法
2.重写是运行期的概念,在运行的时候,根据引用变量所指向的实际对象的类型来调用方法.
类内的方法都是唯一的, 我们在类内唯一确定方法是根据方法名称和参数列表.(访问修饰符在确定类内唯一方法时不起作用).而重载的方法是满足这个条件的,对于编译器来说,dark()和dark(int num)是两个不同的方法.
为对象分配内存是在运行时,当我们定一个了一个引用变量 a时, a所指向的实际对象是在运行时确定的.程序运行时,我们才能确定引用变量所指对象并调用方法.这也就是为什么重写是运行时概念的原因.
_____________________________________________________________________________________________________
方法重载和重写是否都是多态的表现形式?
多态的定义(百度百科):接口的多种不同实现方式即为多态.
多态的定义(某教科书):同一种行为的多种状态.
根据接口的定义,子类对于父类的实现并重写的内容是自定义的(这里也就意味着子类重写了父类的方法).当使用多态new对象时, 调用哪个子类的哪个方法是在运行时确定的,.据此来看,个人认为方法重载不是多态.对于这个问题如果你有不同的看法欢迎评论区留言.
如果本文有帮助到你,请给我点个赞.