关于在java中重写与重载的区别。我们可以先看两个案例明白什么是重写与重载再去仔细分析两者的区别。
我们都知道java中最简单的那个打印方法println,这个方法可以接受你输入各种不同的参数类型,都可以打印出来,这个叫做重载。
package com.blb.考前;
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return super.toString();
}
}
这是一个我们自己定义的类,我们可以重写一个tostring方法,关于重写的标志是@Override,那么它重写的是谁的方法呢,所谓“重”,就是要重新定义了一个方法,那么在这里重新定义的是,Object类中的tostring方法。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
到现在我们就明白了,什么是重载而什么又是重写。现在我们可以仔细分析一下两者的区别。首先我们可以看到重载是在同一个类中,注意这个范围很重要,“同一个类中”。重载是对同一个类中的方法而言的。对于同一个类中的同一个方法名的方法,它们的形参必须要改变,这里的改变可以有很多形式,基本就是参数类型,参数个数,参数顺序这几种。重载是方法的形参必须改变其他不变。而重写发生在子类与父类之间,这里就有继承关系,重写要求子类被重写的方法与父类被重写的方法有相同的参数列表,同时唯一有区别的就是对访问权限的修饰,在这里子类里面重写的方法的权限修饰不能比父类更严格,也就是说比父类更好访问,不能比父类被重写的方法声明更多的异常。
其实重载与重写是java多态性的一种表现,同一个名称的方法,在同一个类中或者在被继承后的子类当中都有很多中不同的表现形式,这不是正是体现了java的多态性吗?而重载是编译时的多态,而重写是运行时的多态。这就是这两者的区别!