重写是在继承体系里而言,简单说就是子类重新写了从父类继承而来的方法,但是要求 返回值和形参都不能改变,只是改了方法的核心业务功能。
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
使用@override,写在方法前面,来检测是否正确覆盖重写。不写也可以重写,只是帮忙检测。推荐使用。
注意:
示例:
package base8_class_extends.demo02;
public class Phone {
public void call() {
System.out.println("打电话");
}
public void send() {
System.out.println("发短信");
}
public void show() {
System.out.println("显示号码");
}
}
package base8_class_extends.demo02;
public class NewPhone extends Phone{
// 来电显示功能更加丰富
@Override
public void show() {
super.show(); // super 表示父类
System.out.println("显示姓名");
System.out.println("显示头像");
}
}
package base8_class_extends.demo02;
public class OverrideTest {
public static void main(String[] args) {
Phone phone = new Phone();
NewPhone newPhone = new NewPhone();
phone.show();
newPhone.show();
}
}
以上可以看到:可以不去修改老代码,而是在去继承老的代码,在老代码的基础上实现新的方法,或者重写一些方法用来迭代加强功能等。
方法的重写规则:
重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
只要使用一个方法名,就可以实现根据参数来调用不同的方法。
参数不同指:
1.参数个数不同
2.参数类型不同
3.参数的多类型顺序不同
与下列因素无关:
1.参数的名称无关
2.返回值类型无关
示例:
public class MethodOverload {
public static void main(String[] args) {
System.out.println(sum(2, 3));
System.out.println(sum(1, 2, 3));
}
public static int sum(int a, int b) {
System.out.println("两个参数相加");
return a + b;
}
public static int sum(int a, int b, int c) {
System.out.println("三个参数相加");
return a + b + c;
}
}
重载规则:
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |