Java中super与this关键字的用途及区别详解
作者:暮乘白帝过重山
这篇文章主要介绍了Java中super与this关键字的用途及区别的相关资料,super和this是Java中用于引用父类和当前对象的特殊关键字,文中通过代码介绍的非常详细,需要的朋友可以参考下
super关键字
super是Java中的一个引用变量,用于引用直接父类对象。
主要用途:
访问父类的成员变量:当子类和父类有同名变量时
super.variableName;
调用父类的方法:特别是当子类重写了父类方法时
super.methodName();
调用父类的构造器:必须在子类构造器的第一行
super(); // 或 super(parameters);
this关键字
this是Java中的一个引用变量,用于引用当前对象。
主要用途:
引用当前对象的成员变量:解决局部变量与成员变量同名的问题
this.variableName = variableName;
调用当前类的方法:明确调用当前类的方法
this.methodName();
调用当前类的构造器:必须在构造器的第一行
this(); // 或 this(parameters);
作为参数传递:将当前对象作为参数传递
method(this);
super与this的区别
| 特性 | super | this |
|---|---|---|
| 引用对象 | 父类对象 | 当前对象 |
| 使用场景 | 主要用于继承关系中 | 可用于任何类中 |
| 调用构造器 | 必须位于子类构造器第一行 | 必须位于构造器第一行 |
| 访问权限 | 只能访问父类可见的成员 | 可以访问当前类所有成员 |
| 链式调用 | 不能链式调用(super.super非法) | 可以链式调用(this.this非法) |
| 静态上下文 | 不能在静态方法/块中使用 | 不能在静态方法/块中使用 |
代码示例
class Parent {
String name = "Parent";
void display() {
System.out.println("Parent's display");
}
}
class Child extends Parent {
String name = "Child";
Child() {
this("Default"); // 调用本类的另一个构造器
}
Child(String name) {
super(); // 调用父类构造器
this.name = name;
}
void display() {
System.out.println("Child's display");
}
void show() {
System.out.println(super.name); // 访问父类的name
System.out.println(this.name); // 访问本类的name
super.display(); // 调用父类的display
this.display(); // 调用本类的display
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child("Test");
child.show();
}
}输出结果:
Parent
Test
Parent's display
Child's display
总结
使用
super主要是为了在子类中明确访问父类的成员,避免与子类成员混淆使用
this主要是为了在类内部明确访问当前对象的成员,避免与局部变量混淆两者都可以用于构造器调用,但都必须位于构造器的第一行
在静态上下文中,两者都不能使用
到此这篇关于Java中super与this关键字的用途及区别详解的文章就介绍到这了,更多相关Java中super与this关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
