Java方法重写(overriding)和方法重载(overloading)的区别

Java重载和重写的区别

一、方法重写(overriding)
方法重写的概念:即重写的方法的方法名、参数个数、参数的类型要和父类的方法必须完全相同。类这样定义的方法称作子类重写的方法。

//父类及父类拥有的方法
class Person {
    public void eat() {
        System.out.println("吃!");
    }

    public void work() {
        System.out.println("上班!");
    }

    public void sleep() {
        System.out.println("睡!");
    }
}

class Studentss extends Person {
	//子类重写了父类的work方法
	//可以看出方法名都是work,参数个数都是空的
    public void work() {
        //使用super关键字调用父类方法,执行父类的work()方法
        super.work();       
        System.out.println("study!");
        System.out.println("玩!");
    }
	//测试类
    public static void main(String[] args)
    {
        Studentss stu = new Studentss();        //创建子类对象
        stu.work();
    }

}

输出结果:![在这里插入图片描述](https://img-blog.csdnimg.cn/20200413144633171.png
由此可以看出重写的目的:可以隐藏从父类继承的方法,如果非要用父类的方法可以使用关键 字super.父类的方法。
重写的注意事项:
1.参数列表必须完全与被重写的方法完全相同
2.参数的返回值必须一致
3.访问权限不能比父类中被重写方法的访问权限低
4.声明为final的方法不能被重写
5.声明为static的方法也不能被重写,但是可以被再次声明
6.如果子类和父类是在同一个包,那么子类可以重写父类的所有的方法
7.private,因为私有的都继承不了,那就重写不了
8.构造方法也不能被重写
二、方法重载(overloading)
方法重载:在一个类中,方法名相同、参数不同、返回值可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

public class Overload {

        public int test(){
        System.out.println("test1");
        return 1;
    }

    public void test(int a){
        System.out.println("test2");
    }

    public String test(String b,int a){
        System.out.println("test3");
        return "returnTest3";
    }

    public String test(int a,String b){
        System.out.println("test5");
        return "returnTest5";
    }

    public static void main(String[] args) {
        Overload o = new Overload ();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test("test3",1));
        System.out.println(o.test(1,"test3"));
    }
}

重载的注意事项:
1.方法名必须相同
2.方法的参数必须不同
3.返回类型可以相同也可以不同
参数不同包括:
1、参数的个数不同
2、参数的个数相同,但是参数列表中对应的某个参数的类型不同

小结:
方法重载(overload)和方法重写(overriding)是java中的两种多态,重写是父类和子类之间的一种多态的表现,而重载是一个类的多态表现。

你可能感兴趣的:(java)