Mặc dù Object là một lớp cụ thể, nó được thiết kế chủ yếu để các lớp các kế thừa. Tất cả các phương thức non-final của nó (equals(), hashCode(), toString(), clone(), và finalize()) đều có các quy tắc chung bởi vì chúng được thiết kế để được overrride. Tất cả các lớp kế thừa từ Object mà overrride các phương thức này đều phải tuân theo các quy tắc chung của chúng.

I.Override phương thức toString()

1.Đặt vấn đề:

Bạn có một định dạng mặc định hữu ích.

2.Giải pháp

Override phương thức toString() kế thừa từ java.lang.Object.

3.Lý giải

Khi bạn gán một đối tượng vào phương thức System.out.println() hoặc bất kỳ phương thức nào tương đương, Java sẽ tự động gọi phương thức toString(). Bởi vì tất cả các lớp trong Java đều có một lớp cha cao nhất là java.lang.Object, và cài đặt mặc định của phương thức toString() trong lớp java.lang.Object là: tên lớp, ký tự @ và giá trị hascode của đối tượng.

Ví dụ

/* Demonstrate toString( ) without an override */

public class ToStringWithout {

int x, y;

/** Simple constructor */

public ToStringWithout(int anX, int aY) {

x = anX; y = aY;

}

/** Main just creates and prints an object */

public static void main(String[] args) {

System.out.println(new ToStringWithout(42, 86));

}

}

Đoạn code trên cho ra kết quả: ToStringWithout@990c747b

Để in tên lớp và các giá trị mong muốn, bạn có thể override lại phương thức toString() như ví dụ dưới đây:

/* Demonstrate toString( ) with an override */
 public class ToStringWith {
     int x, y;
     /** Simple constructor */
     public ToStringWith(int anX, int aY) {
         x = anX; y = aY;
     }
     /** Override toString */
     public String toString( ) {
         return "ToStringWith[" + x + "," + y + "]";
     }
     /** Main just creates and prints an object */
     public static void main(String[] args) {
         System.out.println(new ToStringWith(42, 86));
     }
 }

Kết quả: ToStringWith[42,86].

Bạn thấy bài viết này thế nào?