【Java基础面试题】方法重载和重写的区别

82 阅读1分钟

1.方法的重载
发生在同类中,方法的名相同、参数列表不相同;
为了方便方法的调用,编译器编译时根据参数不同自动匹配对应方法;

//Student.java
package oo.day6;

public class Student {
    public void sayHi(){
        System.out.println("无参方法");
    }

    public void sayHi(String info){
        System.out.println("有参方法");
        System.out.println(info);
    }


}
package oo.day6;

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        s.sayHi();
        s.sayHi("额外输出");
    }
}

//无参方法

//有参方法
//额外输出

2.方法的重写
发生在超类和派生类之间,方法名相同、参数列表相同;
当超类中方法不能满足需求时,在派生类中改写超类方法;

package oo.day6;

public class Person {
    public void sayHi(){
        System.out.println("hi");
    }
}
package oo.day6;

public class Student extends Person {
    public void sayHi(){
        System.out.println("派生类hi");
    }
}
package oo.day6;

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        s.sayHi();
    }
}

//派生类hi

3.派生类中方法重载

package oo.day6;

public class Person {
    public void sayHi(){
        System.out.println("hi");
    }
}
package oo.day6;

public class Student extends Person {
    public void sayHi(String info){
        System.out.println("派生类hi");
        System.out.println(info);
    }
}
package oo.day6;

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        s.sayHi(); //hi
        s.sayHi("额外输出");
        //派生类hi
        //额外输出
    }
}

此时派生类Student中是自动包含了超类中sayHi()方法的,再添加一个sayHi(String info)方法,
则发生了方法的重载。