方法的重载和重写区别
博主拙见
首先在描述方法重载和重写的区别时应该明确其目的。
方法重载的目的是为了使类可以以统一的方式去处理不同数据类型的数据,所以重载的方法名都一样,唯一不同的是方法所带的参数类型以及参数个数不相同。
由于参数个数以及返回类型不尽相同,返回值也不一定相同,所以方法的返回值不能作为判断是否是重载的标准。
方法重写的目的是为了子类希望在继承父类的某些特性时也加入一些自己的东西所以子类重写了父类。(方法的覆盖:如果子类中某一方法与父类的某一方法相同,那么称为方法的覆盖,方法覆盖之后如果想要调用父类的方法的话就需要使用super关键字来调用父类的方法。)
做引用!!!
官方对于重写的解释:在Java和其他一些高级面向对象的编程语言中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。 如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
举栗子!!!
重载
定义两个方法,形参个数不同(其中的一个例子)
private int XiaoMing(String name){
System.out.println("name:"+name);
return 0;
}
private int XiaoHong(String name,int id){
System.out.println("name:"+name+"id:"+id);
return 0;
}
调用及结果:
test1 test1 = new test1();
test1.XiaoMing("小明");
test1.XiaoHong("小红",10);
name:小明
name:小红id:10
重写
定义两个类Animal和Dag
package com.pan.demo1;
/**
* @author:PaErWei date:Created in :2020/7/916:44
*/
public class Animal {
public int animal(String eat){
System.out.println("动物吃什么"+eat);
return 0;
}
}
package com.pan.demo1;
/**
* @author:PaErWei date:Created in :2020/7/916:44
*/
public class Dag extends Animal{
public int animal(String eat){
System.out.println("小狗吃什么"+eat);
return 0;
}
}
调用其中的方法
Animal animal = new Dag();
animal.animal("食物");
结果显示子类的方法
小狗吃什么食物
作比较!!!
重载vs重写
1.方法名:
。重载,重写的方法名都必须相同。
2.形参类型以及个数:
。重载的参数个数以及类型可以不同。重写形参个数以及类型相同。
3.返回类型:
。都可以不相同。
4.作用范围:
。重载的范围要求在同一个类中,重写的话是继承关系,作用在子类对于父类的继承时。
5.权限
。重载时没有特殊要求的,但是重载的话要求子类的访问权限不能比父类小
(访问权限大小public>protected>default>private)
。抛出异常时如果父类抛出IoExecption的话子类就只能抛出Io异常下面的子类异常,而不能抛出Execption这种父类异常。
还有一件事!!!
转载请注明出处!