this关键字和super关键字
909字约3分钟
2025-09-23
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则优先从父类中开始找