Java还与其他各种关键字一起提供了this和super作为特殊关键字,它们分别用于分别表示一个类的当前实例和它的超类。由于具有相似性,这两个关键字之间的区别很大,如下所示-
序号 | 键 | 这个 | 超 |
---|---|---|---|
1 | 代表和参考 | 此关键字主要表示类的当前实例。 | 另一方面,super关键字表示父类的当前实例。 |
2 | 与类构造函数的交互 | 此关键字用于调用同一类的默认构造函数。 | super关键字,用于调用父类的默认构造函数。 |
3 | 方法可访问性 | 此关键字用于访问当前类的方法,因为它具有当前类的引用。 | 可以借助super关键字访问父类的方法。 |
4 | 静态环境 | 该关键字可以从静态上下文中引用,即可以从静态实例中调用。例如,我们可以编写System.out.println(this.x),它将打印x的值而没有任何编译或运行时错误。 | 另一方面,超级关键字不能从静态上下文中引用,即不能从静态实例中调用。例如,我们不能编写System.out.println(super.x),这将导致编译时错误。 |
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}