Java中重载和重写的区别
在学习Java时,我们在一开始总会纠结于重载与重写的区别在哪里,即使在指导这两个方法的具体用处之后都有时会对他们两个方法名称混淆。
其实关于这两个方法很容易去辨认识别:
1.重载
重载是指不同的构造器或方法使用相同的函数名或方法名,但是构造器或方法中的参数个数或类型不同,调用的时候根据构造器或方法的参数来却别对待进行调用
重载在上面的文字中我也介绍了,按我个人理解,可分为以下两类:
- 构造器重载
- 方法重载
class Test{
//构造器重载
Test(){
System.out.println("这是默认构造");
}
Test(int i){
System.out.println("int型重载");
}
Test(char x){
System.out.println("char型重载");
}
//方法重载
public void Way(int a,int b){
System.out.println(a+b);
}
public void Way(double a,int b){
System.out.println(a+b);
}
}
public class Overload {
public static void main(String[] args){
Test test=new Test();
test=new Test(3);
test=new Test('a');
test.Way(3,5);
test.Way(3.5,6);
}
}
代码输出为:
这是默认构造
int型重载
char型重载
8
9.5
在段代码中,我们有三个构造方法,一个是默认另外两个重载,还有两个方法,通过代码与输出我们能够看到,当在主函数中输入的构造类型是什么就调用那个构造,方法使用中填入参数决定你使用的重载方法。
2.重写
重写也被叫做覆盖,一般是发生在子类和父类(也叫基类和导出类)继承中,对原有的方法的方法体进行重写。
需要注意的是,接口实现不是重写,原因在于接口中的方法根本没有方法体,而我们所说的重写就是重写方法体,它连方法体都没有,何来重写之说。
例子如下:
class Animal{
public void run(){
System.out.println("跑方法");
}
}
class Dog extends Animal{
//对Animal方法重写
public void run(){
System.out.println("四只脚跑");
}
}
class Chicken extends Animal{
//对Animal方法重写
public void run(){
System.out.println("用两只脚走");
}
}
public class Override {
public static void main(String[] args){
Animal animal=new Animal();
animal.run();
Dog dog=new Dog();
dog.run();
Chicken chicken=new Chicken();
chicken.run();
}
}
输出为:
跑方法
四只脚跑
用两只脚走
在这里,有必要提一句什么是 多态。
多态是同一个行为具有多个不同表现形式或形态的能力。
在文章中,重载不是实现多态的方法,重写才是。