Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa super () và this () trong chương trình java

Cùng với các từ khóa khác, Java cũng cung cấp từ khóa này và từ khóa super như là các từ khóa đặc biệt chủ yếu được sử dụng để đại diện cho phiên bản hiện tại của một lớp và tương ứng với nó là siêu lớp. Với sự tương đồng này, cả hai từ khóa này đều có sự khác biệt đáng kể giữa chúng được liệt kê như bên dưới -

Từ khóa
Sr. Không. Phím this siêu
1 Trình bày và Tham chiếu từ khóa này chủ yếu đại diện cho phiên bản hiện tại của một lớp. Mặt khác, từ khóa super đại diện cho phiên bản hiện tại của một lớp cha.
2 Tương tác với hàm tạo lớp từ khóa này được sử dụng để gọi hàm tạo mặc định của cùng một lớp. super được sử dụng để gọi hàm tạo mặc định của lớp cha.
3 Khả năng truy cập phương thức từ khóa này được sử dụng để truy cập các phương thức của lớp hiện tại vì nó có tham chiếu của lớp hiện tại. Người ta có thể truy cập phương thức của lớp cha với sự trợ giúp của từ khóa super.
4 Ngữ cảnh tĩnh từ khóa này có thể được tham chiếu từ ngữ cảnh tĩnh, tức là có thể được gọi từ trường hợp tĩnh. Ví dụ:chúng ta có thể viết System.out.println (this.x) sẽ in ra giá trị của x mà không có bất kỳ lỗi biên dịch hoặc thời gian chạy nào. Mặt khác, từ khóa super không thể được gọi từ ngữ cảnh tĩnh, tức là không thể được gọi từ phiên bản tĩnh. Ví dụ:chúng tôi không thể viết System.out.println (super.x), điều này sẽ dẫn đến lỗi thời gian biên dịch.

Ví dụ về điều này so với siêu

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();
   }
}

Đầu ra

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

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