一.关键字this
this是指向当前类对象的一个变量,当前哪个对象调用,this就指向哪个成员
特点
- this可以访问当前对象中的属性、方法、构造器;
- 当局部变量和当前类的属性同名时,this可以区分两者;
- 可以通过this.属性名访问类中的属性;
- 可以通过this.方法名(实参列表)访问类中的方法;
- this只能在构造器中访问其它形式的构造器,通过this(实参列表)来访问构造器;
- this只能在类定义的方法中使用,不能在类外使用;
- this调用其它形式的构造器时,只能放在当前构造器中的第一行;
示例:
package This;
public class Base {
Base(){}
Base(int num){
this.num = num;
}
Base(int num1, int... nums){
this(num1);
}
private int num;
public void showNum() {
System.out.println(this.num);
}
public void printNum(){
System.out.println("Study hard, Work hard");
this.showNum();
}
}
二.关键字super
super是父类对象的引用,通过super可以调用父类的属性、方法、构造器
特点
- super访问的父类并不仅仅是直接父类,而是所有的上层具有继承关系的类;
- super可以访问父类的属性,通过super.属性名来访问;
- super可以访问父类的方法,通过super.方法名(实参列表)来访问;
- super访问父类的构造器,但是只能放在构造器的第一行;
- super和this两者不能出现在同一行,也就是通过super调用父类构造器时,不能通过this调用当前类的其它形式的构造器。
示例:
package Super;
public class Father {
String character;
String hairColor;
int IQ;
Father(){}
Father(String character, String hairColor, int IQ){
this.character = character;
this.hairColor = hairColor;
this.IQ = IQ;
}
Father(int IQ){
this.character = "自由生成";
this.hairColor = "黑色";
this.IQ = IQ;
}
}
package Super;
public class Son extends Father{
String temperament;
Son(){
}
Son(String character, String hairColor, int IQ, String temperament){
super(character, hairColor, IQ);
this.temperament = temperament;
}
Son(String temperament){
super();
this.temperament = temperament;
}
}
- super向上查找属性或方法时,遵循就近原则,也就是上层最近的哪个父类中有对应的属性和方法就调用该属性或方法;
super查找遵循就近原则示例:
package Super;
public class Ancestor {
public int num = 1;
}
package Super;
public class Base extends Ancestor{
}
package Super;
public class Derive extends Base{
public int num = 3;
void showNum(){
System.out.println(super.num);
}
}
package Super;
public class Main {
public static void main(String[] args) {
Derive derive = new Derive();
derive.showNum();
}
}
运行结果:
|