重载和重写
重载
概念
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数 类型不同即可。
特点
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类 型)。调用时,根据方法参数列表的不同来区别。
示例
public class Animal {
String name ;
int age;
public Animal(String name) {
this.name = name;
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
}
重写(覆盖)
概念
在子类中可以根据需要对从父类中继承来的方法进行改造,也称 为方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
特点
- 方法重写时,方法名与形参列表必须一致。
- 方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。
- 方法重写时,子类的返回值类型必须要小于或者等于父类的返回值类型。
- 方法重写时,子类抛出的异常类型要小于或者等于父类抛出的异常类型。
- 方法重写时,子类不能重写父类中声明为private权限的方法 。
示例
public class AnimalTest extends Animal{
public AnimalTest(String name) {
super(name);
}
//重写了父类cry()方法
@Override
public void cry(){
System.out.println("AnimalTest");
}
public static void main(String[] args) {
AnimalTest animalTest = new AnimalTest("Dog");
animalTest.cry();
}
}
区别
重写,overriding,是指在继承的情况下,子类中定义了与父类中具有相同型构的新方法,也就是子类重写了父类的方法。
重载,overloading,是在同一个类中,定义了一个以上具有相同名称,但是有着不同型构的方法,在同一个类中是不允许定义多于一个具有相同型构的方法的。
构造器也是可以重载的,实际上,构造器就是一个方法,构造器的名称就是方法的名称。