目录
1.方法的重载(overload)
先看看定义(有点繁琐,可以不看):
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。调用重载方法时,java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数或参数的顺序不同的方法。Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同。调用方法时通过传递给它们的不同个数和类型的参数,以及传入参数的顺序来决定具体使用哪个方法。
总结:方法的重载是指在同一个类中可以定义多个同名方法但是方法的参数类型和个数需不同。
具体表现在以下几个方面:
1.方法名相同,参数类型不同:
public static void add(int a,int b) {
int sum=a+b;
}
public static void add(double a,int b) {
double sum=a+b;
}
2.方法名相同,参数顺序不同:
public static void add(double a,int b) {
double sum=a+b;
}
public static void add(int a,double b) {
double sum=a+b;
}
3.方法名相同,参数个数不同:
public static void add(int a,int b) {
int sum=a+b;
}
public static void add(int a,int b,int c) {
int sum=a+b+c;
}
误区(容易混淆的!!!):
1.只有返回值不同,不构成重载:
2.参数类型相同,参数名不同,不构成重载:
2.方法的重写(override)
重写:也叫覆写,覆盖。子类在继承父类中的方法的时候,不需要重新编写相同的方法。但不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写,将父类继承过来的某个方法进行覆盖,子类对象调用该方法时,一定是调用已经覆盖的方法。
方法的重写需要满足以下条件:
1.方法的重写,不能发生在同类中,只能发生在子类中。
2.子类中的权限大于或等于父类的权限,( 下附修饰符权限图)
3.两个方法的返回值、方法名、参数的类型和个数必须相同
4、重写之后的方法不能比之前的方法抛出更多的异常,可以更少。
注意事项:
1.父类方法的权限若为private(即私有方法),不能被重写
2.构造方法无法被继承,无法被重写(但是可以被重载)
3.方法的重写不谈属性
4.若方法是静态的,重写没有意义
来看几个例子:
1.正确的重写
class Person {
void print() {
System.out.println("未被重写");
}
}
class Student extends Person {
public void print() {
System.out.println("成功重写!!!");
}
}
public class Experiment {
public static void main(String[] args) {
new Student().print();
}
}
运行结果:成功重写!!!
2.父类方法的是私有的(错误)
将上述例子父类的访问修饰符改成private
class Person {
private void print() {
System.out.println("未被重写");
}
public void fun() {
this.print();
}
}
class Student extends Person {
public void print() {
System.out.println("成功重写!!!");
}
}
public class Experiment {
public static void main(String[] args) {
new Student().fun();
}
}
运行结果:未被重写
3.总结
重写和重载区别很大,重载是指一个方法名经过参数类型或者个数的修改可以被多次调用,而重写是指子类将父类继承过来的某个方法给覆盖掉了,调用的实际是子类自己的方法。