前言
重载:是发生在同一个类里,方法名相同,功能类似,参数不同的一系列方法叫做方法的重载。
重写:是发生在子类里的,子类中定义了一个与父类方法名、返回值、参数都完全一致的方法,被称为方法的重写。
一、重载
- 方法名和返回值类型相同
- 传入 参数的顺序、个数、类型不同
拿一个类的构造方法重载示例:
class Product{//类
//Product类的构造方法重载
public Product(){
}
public Product(int x) {
}
public Product(String a) {
}
public Product(String a,int x) {
}
public Product(int x,String a) {
}
}
其他方法一样可以重载
二、重写@Override
- 子类中定义一个与父类 方法名、返回值类型、传入的参数完全一致的方法,叫重写,也称 覆写 覆盖;有任何不同,都不是重写。
class Personx{//父类
public void run() {
System.out.println("这是父类的一个run()方法");
}
}
class Student extends Personx{//子类
//对父类方法run进行重写(覆盖)(覆写)
@Override//配合编译器检查当前方法是否为“重写”
public void run() {
System.out.println("这是子类的一个run()方法");
}
}
- 创建的对象如果为子类对象,那么调用方法时,会先调用子类重写的方法
Student student=new Student();//创建的是子类对象
Personx p=new Student();//创建的是子类对象
student.run();//创建的是子类对象, 重写了方法,会优先调用子类方法
p.run();//调用的是子类方法
- 在子类的重写方法中,可以通过
super
来调用父类被重写了的方法 - 被
final 关键字
修饰的方法,不能被重写
- class Person {//父类
protected String name;
public final String hello() {
//该方法被final修饰,不能被重写了
return "Hello, " + name;
}
}
Student extends Person {
// compile error: 不允许重写
@Override
// public String hello() {
// }//错误的
}