Java中重载(Overload)和重写的区别(Override)和使用方法

重载(Overload)

重载发生在本类,方法名相同,参数列表不同,与返回值无关,只和方法名,参数列表,参数的类型有关.

比如说,一个Person类.如果不写构造方法的话,在测试类中默认调用的就是无参的构造方法,是系统默认的.

如果写了有参的构造方法Person(String name,int age){this.name=name;this.age=age}就必须手动写一个默认的无参的构造方法.因为写了有参,默认的无参的系统就不提供了.Person()和Person(String name,int age)就构成了方法的重载.

再比如写一个普通的方法,两数相加的方法.

public static void plus(int a,int b){
    System.out.println(a+b);
}

public static int plus(int a,doule b){
    return a+b;
}

public String plus(String a,String b,int c,double d){
    String str = a+b+c+d;
    return str;
}
public class Test{
public static void main(String[] args){
    Test t = new Test();
    plus(2,3)//输出5
    System.out.println(t.plus(2,3.0))//输出的就是5.0
    System.out.println(t.plus("2","3",4,5.0)//输出的就是2345.0    
    }
}

上面几种虽然返回值类型不同,但依然构成方法的重载.Java虚拟机JVM会根据参数的不同自动选择加载重载过后的哪种方法.

加入Person类中只有三个参数,name,age,gender的构造方法,和一个无参的构造函数,但你new对象时传递了两个参数,就会报错,提示该构造方法不存在.


重写(Override)

重写发生在父类子类之间,比如所有类都是继承与Object类的,Object类中本身就有equals,hashcode,toString方法等.在任意子类中定义了重名和同样的参数列表就构成方法重写.

public class Father{
    public void method(){
        System.out.println("我是父类定义的方法")
    }
}

class Son extend Father{
    @Override
    public void method(){
        System.out.println("我重写了父类定义的方法")
    }
}

重写这种情况大多发生在子类继承父类,而又不想完全调用父类的方法,就可以重写父类定义过的方法,参数列表和名字必须一样.返回值类型不能i父类更宽泛,抛异常不能比父类更窄.

重写更多的发生在实现接口,继承抽象类中的抽象方法中.因为接口或者抽样方法中定义的方法大多都只有一个方法名,加上返回值类型或者参数列表,没有具体的方法体去实现.接口或者说抽样方法,更多的是一种规范.这样就规定了子类如果要继承或者实现他,就必须要重写其中的方法.

猜你喜欢

转载自blog.csdn.net/weixin_42401258/article/details/81783805