Index / Java

Java 中的重写(Override)与重载(Overload)

原文:https://ichochy.com/posts/java/20200820.html

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 中多态的特性。而方法的重载没有严格的定义,就是个不同的方法,只是名字相同而已。