重载
定义: 在同一个类中的方法名相同参数列表不同的方法。
参数列表的不同包括参数的顺序、数量和类型,但与参数名称无关。
方法的返回值和访问修饰符任意都可以。
代码例子:
public class Test {
public static void main(String[] args) {
Test rldTest = new Test();
// 分别调用无参的重载方法和带参的重载方法。
rldTest.reloadTest();
rldTest.reloadTest(3);
}
// 无参的重载方法。
public void reloadTest() {
System.out.println("我是无参的重载方法。");
}
// 带参的重载方法。
public void reloadTest(int i) {
System.out.println("我是带参的重载方法。");
}
}
输出结果为:
输出结果显示根据传入参数的不同调用了方法名相同的不同方法。
重写
定义: 在有继承关系的子类中的方法名和参数列表都和父类中的方法相同的方法。
参数列表的相同包括参数的顺序、数量和类型,但与参数名称无关。
返回值如果是void或者基本数据类型时必须相同,可以是父类或其子类,子类不一定是当前子类也可以是父类的其它子类。
代码例子:
public class Subject {
public String subjectName;
public int subjectNum;
public String subjectCategory;
public void subjectMethod1() {
System.out.println("这是父类的无返回值或基本数据类型方法输出。");
}
public Subject subjectMethod2() {
Subject subjectTest = new Subject();
System.out.println("这是父类的引用数据类型方法输出。");
return subjectTest;
}
}
public class Science extends Subject {
public static void main(String[] args) {
// 实例化子类对象。
Science science = new Science();
// 调用子类重写的方法。
science.subjectMethod1();
science.subjectMethod2();
}
// 重写父类的方法,父类无返回值,子类的方法也必须无返回值。
public void subjectMethod1() {
System.out.println("这是子类的无返回值或基本数据类型方法输出。");
}
// 重写父类的方法,父类的返回值是Subject对象,子类的返回值可以是这个对象也可以是父类的子类对象。
public Science subjectMethod2() {
Science science = new Science();
System.out.println("这是子类的引用数据类型方法输出。");
return science;
}
}
输出结果为:
输出结果显示子类调用的是重写父类的方法。
注: 静态方法带static关键字不能被重写,在子类中写一个和父类方法名,参数列表都相同的方法并不是对父类方法的重写,而是新的子类方法,编译器不报错是认为这是子类对父类方法的隐藏。
父类中带abstract关键字的方法必须被重写。