一、重载
1.什么是重载?
public class TestMethod {
public static void main(String[] args) {
add(1, 2); // 调用add(int, int)
add(1.5, 2.5); // 调用add(double, double)
add(1.5, 2.5, 3.5); // 调用add(double, double, double)
}
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
}
上述代码当中的add就称为被重载了,因为三种add方法的名称都相同,都叫add,但是参数类型又不同。
注意:
2.为什么用重载(重载的意义)?
在方法大体步骤相同,只是数据类型不同(都是进行加分、除法......)时,运用重载可以减少多次修改来提供多个不同方法名这一步骤(不用不断改写为add2,add3,add4......),这样可以减少我们写代码的麻烦!!(父类和子类中构成重载的方法,直接可以通过参数列表区分清访问父类还是子类方法)
3.怎么写重载?
修饰符 返回值类型 方法名(参数列表){
方法体代码;
(return 返回值);
}
例如:(注意重载的注意事项)
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
二、重写
1.什么是重写?
在Java中,如果多个方法的名字相同(父类与子类当中),参数类型也相同,则称该几种方法被重写了。在继承这一方面的知识当中,会遇到子类继承父类的变量及方法,如果此时子类与父类的方法名称与参数类型也相同,那么就会遇到所谓的重写。
注意:
1.重写只发生在子类当中,同类不存在。
2.重写指的是两个方法的方法名、返回值类型、参数类型和个数相同(子类重写父类)。
3.若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数列表时,也就是重写时,优先访问子类的方法!!这一过程叫做运行时绑定或动态绑定!如果一定要访问父类的方法,需用到super关键字。
4.子类的访问权限(修饰符的选择)必须大于等于父类!
5.方法的返回值可以不同,但必须是父子类关系,除此以外必须相同!
6.构造方法和某些限定修饰符不能重写!
public class Base {
int a;
int b;
public void methodA(){
System.out.println("Base中的methodA()");
}
public void methodB(){
System.out.println("Base中的methodB()");
}
}
public class Derived extends Base{
int a; // 与父类中成员变量同名且类型相同
char b; // 与父类中成员变量同名但类型不同
// 与基类中methodB()构成重写
public void methodB(){
System.out.println("Derived中的methodB()方法");
}
public void methodC(){
// 对于同名的成员变量,直接访问时,访问的都是子类的
a = 100;
b = 101;
// 访问父类的成员变量时,需要借助super关键字
super.a = 200;
super.b = 201;
methodA();
// 如果在子类中要访问重写的基类方法,则需要借助super关键字
methodB(); // 直接访问,则永远访问到的都是子类中的methodA(),基类的无法访问到
super.methodB(); // 访问基类的methodB()
}
2.为什么用重写(重写的意义)?
重写增加了代码的复用性,使代码效率更高,且子类继承了父类的内容,同时子类还可以自己新增所需内容,具有扩展性。
3.怎么写重写?
大致如上述的代码段:
修饰符 子类{
方法体代码:
}
修饰符 子类 extends 父类 {
方法体代码:
调用方法(直接调用是子类的方法,调用父类用super);
}