1、this
1.1、this 在普通方法内
this 可以指代任何的对象,当 this 出现在某个类的方法体中时,它所指代的对象是还不能确定的,但是它的类型确定,类型必须是当前类。当该方法被调用时,肯定是该类的某个对象进行调用,此时 this 就是指当前的对象。举个例子,代码如下:
public class Dog {
public void jump(){
System.out.println("Jumping...");
}
public void run(){
this.jump();
System.out.println("Running...");
}
}
这是一个 Dog 类,该类有两个方法,run()方法中使用了 this 关键字,此时表示的是当前类的对象在调用 run()方法时,执行到 this.junp();就会使用当前的对象调用 jump()方法。大部分时候类内的方法调用 this 关键字是可以省略的。比如在类的成员变量和局部变量重名,又需要访问成员变量时,此时需要用 this关键字。
1.2、this 在构造方法内
this 在构造器中使用就表示该构造器正在构造的对象。案例代码如下:
public class Cat {
private String name;
private int age;
public Cat(String name,int age){
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
2、super
super 关键字是为了让子类能调用父类中被子类重写的方法。话不多说,上例子:
public class Dog {
public void jump(){
System.out.println("Jumping...");
}
public void run(){
System.out.println("Running...");
}
}
public class LittleDog extends Dog {
@Override
public void jump() {
System.out.println("Little Dog jumping...");
}
public void superJump(){
super.jump();
}
}
上面是父类 Dog 与子类 LittleDog,下面是测试代码:
public class LittleDogTest {
public static void main(String[] args) {
LittleDog littleDog = new LittleDog();
littleDog.jump();
littleDog.superJump();
littleDog.run();
}
}
// 结果
Little Dog jumping...
Jumping...
Running...
被重写的 jump 方法直接调用就是子类的方法,需要通过 super 关键字才能调用父类的 jump 方法,没有被重写 run 方法子类就可以直接调用父类中的 run 方法。