this关键字和super关键字
909字约3分钟
2025-11-21
this关键字的使用细节

this会优先调用本类中的属性和方法,如果本类中没有调用的属性和方法,则会去调用父类中的属性和方法(父类中的私有属性和方法不能被调用),如果父类中也没有调用的属性和方法,则会去调用超类,依次类推利用
this关键字来调用别的方法class This { public void This1() { System.out.println("This1方法已被调用。"); } public void This2() { System.out.println("This2方法已被调用。"); /* 这两个调用方法是有区别的 */ // 直接调用 This1(); // 通过this方法调用 this.This1(); } } public class this02 { public static void main(String[] args) { This t = new This(); t.This2(); System.out.println("This结束"); } }利用
this关键字调用别的构造器class This { public This() { // 调用构造器 /* 注意事项 如果想用this关键字去调用别的构造器 前提是该this关键字只能在构造器中使用 this语句调用别的构造器要放在第一条 */ this("张三", 18); } public This(String name, int age) { System.out.println(name); System.out.println(age); } } public class this02 { public static void main(String[] args) { This t = new This(); t.This2(); System.out.println("This结束"); } }
super关键字
super 关键字的细节
this只能出现在构造方法和实例方法(这个实例方法也就是不带static关键字的方法)之中,代表的是当前正在调用这个方法的对象super在构造器中是默认存在的,前提是构造器中没有this语句,因为如果你输入了this语句那么该语句就会替换掉默认的super语句super也只能出现在构造方法和实例方法中,代表的是当前对象的父类型特征super必须放在构造器中的第一行(super只能在构造器中使用 ),this也是必须放在构造器中的第一行,所以super和this不能写在一起,在构造器中如果写了this方法,那么默认的super方法就会被this替换掉

super调用属性和方法的细节
super调用属性的细节和调用方法的细节是一样的
如果super调用的方法或则属性在父类中没有找到,那么就到父类的父类中继续查找
父类A1
public class A1 {
public void info() { }
protected void info1() { }
void info2() { }
private void info3() { }
}子类A2
public class A2 extends A1 {
public A2() {
// 调用父类中的方法
super.info();
super.info1();
super.info2();
// 私有的方法不能被调用
// super.info3();
// 下面这个调用代码和上面的super方法调用的区别
// 下面这行代码是调用离自己最近的info2方法
// 而上面的super.info2是调用父类中的info2方法
// 所以运行下面这行代码的时候,会优先查找本类中是否有该方法
// 如果没有再去父类中查找,父类中没有则继续到父类中的父类中查找
// 如果找到了属性或则方法,但不能访问,则报错
// 如果没有找到属性或则方法,则会提示不存在
// 调用方法,this方法加不加都无所谓
info2();
super.info2();
}
public void A2() {
// 调用父类中的属性
// 不能调用私有属性,super.d
System.out.println(super.a + " " + super.b + " " + super.c);
}
}super 和 this的区别
总结:this优先从本类中开始找,而super则优先从父类中开始找

