Java中重写和重载的区别

一.重写

  子类实现父类的同名方法,并且参数的类型和个数完全相同,这种情况称为覆写/重写/覆盖

重写的规则:
①返回类型相同
②方法名相同
③参数相同

重写要注意的事项:

①普通方法可以重写,static修饰的静态方法不能重写
②重写中子类的方法的访问权限不能低于父类的方法访问权限

参考代码:

//Animal父类
class Animal{
    public String name;

    public Animal(String name){      //父类构造
        this.name=name;
    }

    public void eat(){             //父类eat方法
        System.out.println(this.name+"Animal eat:()");
    }
}


//定义Cat类继承Animal
class Cat extends Animal{
    public String sex;                      //子类属性

    public Cat(String name,String sex){    //构造方法
        super(name);
        this.sex=sex;
    }

    @Override                         //重写注解
    public void eat() {               //对父类eat方法进行重写
        System.out.println(this.name+this.sex+"Cat eat:()");
    }
}

public class Test {
    public static void main(String[] args) {
        Cat cat= new Cat("花花", "女");
        cat.eat();
    }
}

//打印结果
花花女Cat eat:()

  针对重写的方法,可以使用 @Override注解显式指定,
有了注解,就可以进行合法性校验,假如不小心将方法名拼写错了, 此时编译器就会发现父类中没有此方法,编译报错,提示无法构成重写。


二.重载

  有时候需要用一个函数同时兼容多种参数的情况,就可以使用方法的重载(同一个方法名字,提供不同版本的实现,称为方法重载) 补充:构造方法也可以重载

重载规则:
①方法名相同
②参数列表不同(个数和类型)
③返回值类型不作要求
④必须在同一个类中

参考代码:

class Test{
    public static void main(String[] args) {
        int a=10;
        int b=20;
        int i=add(a,b);
        System.out.println(i);

        double a2=10.5;
        double b2=12.5;
        double i2=add(a2,b2);
        System.out.println(i2);
    }

    public static int add(int x,int y){
        return x+y;
    }

    public static double add(double x,double y){
        return x+y;
    }
}

//打印结果
30
23.0

  上述代码中有两个add方法,当主函数中调用add方法时,通过传入的参数不同,可以确定调用哪个重载方法。先找严格匹配,再找兼容匹配

参考代码:

class Test{
    public static void main(String[] args) {
        char a=10;
        char b=20;
        add(a,b);

        float a2=10.5f;
        float b2=12.5f;
        add(a2,b2);

    }

    public static void add(int x,int y){
        System.out.println(x+y);
    }

    public static void add(double x,double y){
        System.out.println(x+y);
    }
}

//打印结果
30
23.0

  观察上述代码可以发现char类型的调用了参数类型为int类型的方法,而float调用了参数类型为double的方法,这是因为char类型的参数没有严格可以匹配的参数类型,所以就会将char提升为int类型(找兼容类型)再调用add。float被提升为double类型再进行调用方法。




小结:
在这里插入图片描述

版权声明:本文为lilililililiki原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lilililililiki/article/details/103149864