Java 是一个面向对象编程的语言,我们就以面向对象的方式来解释下重写(Override
)与重载(Overload
)。子类存在父类名字相同的方法,而参数的个数与类型一样,返回值也一样的方法,就称为方法的重写(Override
)。同类中定义了多个名字相同的方法,但他们的参数数量不同或数量相同而类型和次序不同,则称为方法的重载(Overload)。
重写(Override
)
重写出现在继承中,子类重新编写父类的方法,改写父类现有的方法,方法相同而不相似。如:你继承了你爸的房子,用来装修婚房,按照自己想法去装修,完成后外表起来没有什么变化,可内部的格局已经发生了变化。
重写代码实例
/*
* File:Example.java
* User:iChochy
* URL:https://ichochy.com
* Copyright (c) 2020
* Date:2020/08/25 22:33:25
*/
package com.ichochy.example;
public class Example {
public static class Father{
public void house(){
System.out.println("father house");
}
}
public static class Child extends Father{
/**
* 重写父类方法,方法名、参数完全相同
*/
@Override
public void house() {
super.house();//调用父类 house 方法
System.out.println("child house");
}
}
public static void main(String[] args) {
new Father().house();
System.out.println("################");
new Child().house();
}
}
重载(Overload
)
重载出现在同类中,重新编写一个新的方法,改进现有的方法,方法相似而不相同。如:你要修建一套房子,可以借鉴别人建房子的经验来建造自己的房子,格局相似而不相同。
重载代码实例
/*
* File:Example.java
* User:iChochy
* URL:https://ichochy.com
* Copyright (c) 2020
* Date:2020/08/25 22:33:25
*/
package com.ichochy.example;
public class Example {
public void house(){
System.out.println("house");
}
/**
* 重载同类方法,方法名相同,而参数不相同
* @param name
*/
public void house(String name) {
this.house();
System.out.println(name+" house");
}
public static void main(String[] args) {
new Example().house();
System.out.println("################");
new Example().house("iChochy");
}
}
对比
对比 | 重写 | 重载 |
---|---|---|
方法名字 | 相同 | 相同 |
方法参数 | 相同 | 不相同 |
返回值 | 相同 | 可以不相同 |
范围 | 子类中 | 同类或子类中 |
总结
方法的重写是有严格的定义,子类重写父类的方法,是自我型态表达,形成 Java 中多态的特性。而方法的重载没有严格的定义,就是个不同的方法,只是名字相同而已。