Java 方法重载和方法重写的区别

一.方法重载

A.重载的规则

1.方法重载:存在同一个类中,允许存在过个同名的方法,只要他们的参数列表不同即可,与修饰符和返回值类型无关
2.参数列表 :个数不同,数据类型不同,顺序不同
3.重载⽅法调⽤:JVM通过⽅法的参数列表,调⽤不同的⽅法
4.方法能够在同一个类中或者在一个子类中被重载

public class Overloading {
    public int test(){
        System.out.println("test1");
        return 1;
    }
 
    public void test(int a){
        System.out.println("test2");
    }   
 
    //以下两个参数类型顺序不同
    public String test(int a,String s){
        System.out.println("test3");
        return "returntest3";
    }   
 
    public String test(String s,int a){
        System.out.println("test4");
        return "returntest4";
    }   
 
    public static void main(String[] args){
        Overloading o = new Overloading();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test(1,"test3"));
        System.out.println(o.test("test4",1));
    }
}

二.方法重写

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写

A.重写规则

1.如果不继承该类,则不能重写该类的方法,即重写方法在父子类中。
2.参数列表必须相同
3.返回值类型与被重写方法的返回值类型可以不同,但是必须是父类返回值的派生类(Java 7 及更高版本可以不同)
4.子类的访问权限不能比父类中被重写的方法权限更低。例如:如果父类的一个方法被声明为public 那么子类就不能声明为protected
5.父类的成员方法只能被子类重写
6.声明为final的方法不能被重写
7.声明为static 的方法不能被重写,但是可以被再次声明
8.子类和父类在同一个包中,那么子类可以重写父类中所有的方法,除了声明为private,final的方法
9.子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
10.构造方法不能被重写

B.Super关键字的使用

当需要在子类中调用父类的被重写的方法时,要使用super关键字

class Animal{  public void move(){
System.out.println("动物可以移动");
} 
}
class Cat extends Animal{
Public void move(){
super.move();//应用super类的方法
System.out.println("猫可以跑和走");
}
}
public class TestDog{
   public static void main(String args[]){
     Animal b=new Dog();
     b.move();//执行Dog类的方法
   }
}
/*运行结果
动物可以移动
狗可以跑和走*/

三.重写和重载的区别

区别点重载方法重写方法
参数列表必须修改不可修该
返回类型可以修改返回值类型与被重写方法的返回值类型可以不同,但是必须是父类方法返回值的派生类(Java 7及以后可以修改)
访问权限可以修改子类方法的权限必须大于等于被重写方法的权限
异常可以修改可以减少或者删除 ,一定不能抛出新的异常或者更广的异常

四.总结

方法的重写(overriding)和重载(overloading)是java 多态性的不同表现,重写是父类与子类之间的一种多态的一种表现,重载可以理解成多态的具体表现新式
1.方法重载是一个类中定义多个重名的方法,但是他们的参数的数量不同或是数量相同而类型和次序不同
2.方法重写是子类存在的方法与父类的方法名字相同,而且参数类型和个数相同,返回值也一样的方法。
3.重载是一个类的多态表现,重写是子类与父类的的一种多态的表现

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值