在 Java 中,super 和 this 都是关键字,常用于类中,但它们的作用和指向对象不同。下面从多个角度对比说明。
thissuper| 对比点 | this | super |
|---|---|---|
| 指向对象 | 当前类对象 | 父类对象(当前对象的一部分) |
| 访问变量 | 本类成员变量 | 父类成员变量 |
| 调用方法 | 本类方法 | 父类方法 |
| 调用构造方法 | this() |
super() |
| 是否可单独使用 | 可以 | 不可以单独表示对象 |
class Parent {
int x = 10;
}
class Child extends Parent {
int x = 20;
void show() {
System.out.println(x); // 20
System.out.println(this.x); // 20
System.out.println(super.x);// 10
}
}
class Parent {
void print() {
System.out.println("Parent");
}
}
class Child extends Parent {
void print() {
System.out.println("Child");
}
void test() {
print(); // Child
this.print(); // Child
super.print();// Parent
}
}
class Parent {
Parent() {
System.out.println("Parent 构造");
}
}
class Child extends Parent {
Child() {
super(); // 调用父类构造,必须第一行
System.out.println("Child 构造");
}
}
✅
super()和this()都必须在构造方法第一行
❌ 不能同时出现
Child() {
super();
this(); // 错误
}
static void method() {
this.x; // 错误
super.x; // 错误
}
this指向“我自己”,super指向“我爸(父类)”
如果你愿意,我也可以用 内存模型图 或 面试常问点 来帮你理解。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。