Mong mọi người giải thích về super trong Java
public Student() {
super();
}
cho em hỏi tại sao lại có hàm super(); trong constructor của lớp Student? Như em đã được học thì super(); được dùng trong lớp con để gọi hàm khởi tạo của lớp cha hoặc để truy cập vào thành viên (phương thức, biến) ẩn của lớp cha (bị ẩn với các thành viên của lớp con).Ở đây lớp Student thừa kế lớp cha ngầm định Object, tức là sẽ gọi constructor mặc định của Object, thế constructor mặc định của nó như thế nào? Giả sử bỏ super(); thì constructor mặc định của lớp cha vẫn thực thi như bình thường.Vậy dùng super(); ở đây có ý nghĩa gì? và không có nó thì em thấy chương trình vẫn chạy bình thường. Mong các pro chỉ giúp.
Ko viết thì nó vẫn mặc định gọi super(). Viết cho tường minh thôi
Viết đúng là phải như thế này
Trong java tất cả các class đều kế thừa từ class Object. Nhưng vì đó là class mặc định cho nên không viết cũng không sao.
A: Ý nghĩa của từ khóa Super:
Từ khóa super trong java là một biến tham chiếu được sử dụng để tham chiếu trực tiếp đến đối tượng của lớp cha gần nhất.
Bất cứ khi nào bạn tạo ra instance(thể hiển) của lớp con, một instance của lớp cha được tạo ra ngầm định, nghĩa là được tham chiếu bởi biến super.
B: Cách dùng:
Trong java, từ khóa super có 3 cách sử dụng như sau:
1 - Từ khóa super được sử dụng để tham chiếu trực tiếp đến biến instance của lớp cha gần nhất.
2 - super() được sử dụng để gọi trực tiếp Constructor của lớp cha.
3 - Từ khóa super được sử dụng để gọi trực tiếp phương thức của lớp cha.
C: Một số method của class Object
1 - public final ClassgetClass() Trả về đối tượng lớp Class của đối tượng này. Lớp Class có thể được sử dụng để lấy metadata của lớp này
2 - public int hashCode() Trả về hashcode cho đối tượng này
3 - public boolean equals(Object obj) So sánh đối tượng đã cho với đối tượng này
4 - protected Object clone() throws CloneNotSupportedException Tạo và trả về bản sao (bản mô phỏng) của đối tượng này
5 - public String toString() Trả về biểu diễn chuỗi của đối tượng này
6 - public final void notify() Thông báo Thread đơn, đợi trên monitor của đối tượng này
7- public final void notifyAll() Thông báo tất cả Thread, đợi trên monitor của đối tượng này
Kết luận:
Bạn có thể thấy method số 5 toString() ở trên là 1 class điển hình mà tất cả các class đều hay dùng nhưng tại sao dùng được? bởi vì nó đã kế thừa từ class Object.
Mặc đinh các class đều kế thừa Object cho nên không cần viết super() cho class object. Nhưng nếu bạn không viết, compiler vẫn tự tạo và gọi như thường.
Cám ơn bạn đã trả lời dễ hiểu một cách chi tiết.!