Java程序中super()和this()的区别


除了各种其他关键字外,Java还提供this和super作为特殊关键字,它们主要分别用于表示类的当前实例及其超类。尽管两者相似,但它们之间存在显著差异,如下所示:

序号关键字thissuper
1表示和引用this关键字主要表示类的当前实例。另一方面,super关键字表示父类的当前实例。
2与类构造函数的交互this关键字用于调用相同类的默认构造函数。super关键字用于调用父类的默认构造函数。
3方法访问权限由于this关键字具有当前类的引用,因此它用于访问当前类的方法。可以使用super关键字访问父类的方法。
4静态上下文this关键字可以从静态上下文引用,即可以从静态实例调用。例如,我们可以编写System.out.println(this.x),这将打印x的值,而不会出现任何编译或运行时错误。另一方面,super关键字不能从静态上下文引用,即不能从静态实例调用。例如,我们不能编写System.out.println(super.x),这将导致编译时错误。

this与super的示例

Equals.jsp

class A {
   public int x, y;
   public A(int x, int y) {
      this.x = x;
      this.y = y;
   }
}
class B extends A {
   public int x, y;
   public B() {
      this(0, 0);
   }
   public B(int x, int y) {
      super(x + 1, y + 1);// calls parent class constructor
      this.x = x;
      this.y = y;
   }
   public void print() {
      System.out.println("Base class : {" + x + ", " + y + "}");
      System.out.println("Super class : {" + super.x + ", " + super.y + "}");
   }
}
class Point {
   public static void main(String[] args) {
      B obj = new B();
      obj.print();
      obj = new B(1, 2);
      obj.print();
   }
}

输出

Base class : {0, 0}
Super class : {1, 1}

Base class : {1, 2}
Super class : {2, 3}

更新于:2020年2月25日

10K+ 浏览量

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.