文章目录
1.方法重载
1.1. 什么是方法重载?
在Java程序中,当一个类的定义中,两个方法具有相同的名称,我们就称这两个方法重载了。
public class Person {
int add(int x,int y){
return x+y;
}
int add(int x){
System.out.println("我会加法");
return x+1;
}
}
如上所示,在Person类中,有两个名为add的方法, 这两个方法就重载了。
1.2. 为什么会出现这样的情况?
在java中我们允许多个方法有相同的名字,是因为:
为了增强我们项目代码的稳定性,我们可能对一种业务有多种不同入参的组合,当我们需要对这一种情况进行应对,这时方法重载起到了作用,方法重载让我们在不改变业务含义的情况下进行不同的处理。
注意:重载方法的参数必须不同(就像我们人一样,名字可以相同,但长相一定不同),参数不同是指:参数的个数不同,参数的个数相同的情况下,这些参数至少有一个的参数类型不同。
注意:方法的返回类型和参数的名字不参与比较。(不影响重载)
2.方法重写
2.1.什么是方法重写
在Java程序中,有两个类Person,Student,其中Student是Person的子类,如果这两个类有一个相同的方法,我们就认为Student重写了Person的这个方法。 这就是方法重写。(也称方法覆盖)
例子:
public class Person {
int add(int x,int y){
return x+y;
}
}
class Student extends Person{
/**
* 子类Student重写父类Person的方法:
* int add(int x,int y)
* @param x
* @param y
* @return
*/
int add(int x,int y){
return x+y+y;
}
}
2.2.为什么会出现这样的情况?
在编写代码的过程种,如果一个子类继承了父类的方法后,父类的方法不能应对子类的所有需求,子类也可以对这个方法进行重写,使之满足自己的业务需求。
3.重载和重写的差别
| 类型 | 位置不同 | 作用不同 |
|---|---|---|
| 重载 | 同一个类中 | 在一个类中提供一种业务处理的多种实现实现多态 |
| 重写 | 父子类之间 | 子类可以选择覆盖父类的同一个方法的实现来达到自己的目的 |
4.this关键字
我们知道类中有局部变量和成员变量两个类型的变量,如果在一个类的一个方法中有着一个和方法外完全相同的变量。
比如:
public class A{
int x = 10;
void f(){
int x = 5;
x = x+5;
System.out.println(x);
}
}
我们知道它输出的是10(局部优先),但我们是不是就不能在f方法中用外面的x?
当然不是,this在这里的作用就出来了
public class A{
int x = 10;
void f(){
int x = 5;
x = this.x+5;
System.out.println(x);
}
}
这样我们输出的x就是15了
方法的调用也是如此
其实this是实例对象内部指代自身的引用,它可以解决成员变量和局部变量的同名问题,this可以调用成员变量/方法,无法调用局部变量,在普通方法中可以省略this。
但一般不建议省略,因为this相当于成员变量的标志,有助于代码的可读性。
注意:静态方法中不允许使用this
5.super关键字
super关键字代表对当前实例对象的父类的实例对象的引用,super可以直接调用父类的成员变量(非private的)super也可以调用父类的成员方法(非private的),super可以调用直接父类的构造方法,但只限在子类的构造方法中使用且必须是第一条语句。
例如:
class Person1 {
int add(int x,int y){
return x+y;
}
}
class Student1 extends Person1{
/**
* 子类Student重写父类Person的方法:
* int add(int x,int y)
* @param x
* @param y
* @return
*/
int add(int x,int y){
//通过super调用父类的add方法
super.add(1,2);
return x+y+y;
}
}
1721

被折叠的 条评论
为什么被折叠?



