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.
Khi một lớp được kế thừa từ lớp cha trong cả lớp cha và lớp con đều có một phương thức trùng tên nhau, thế thì làm thế nào có thể gọi phương thức trùng tên đó của lớp cha, java cung cấp cho ta từ khoá super
dùng để chỉ đối tượng của lớp cha.
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.
Super tham chiếu đến biến instance của lớp cha
Từ khóa super được sử dụng để tham chiếu trực tiếp đến biến instance của lớp cha.
class Xe {
int speed = 50;
}
public class XeDap extends Xe {
int speed = 100;
void display() {
System.out.println(speed); // speed của lớp con
}
public static void main(String args[]) {
Bike b = new Bike();
b.display();
}
}
100
class Xe {
int speed = 50;
}
public class XeDap extends Xe {
int speed = 100;
void display() {
System.out.println(super.speed); // speed của lớp cha
}
public static void main(String args[]) {
XeDap b = new XeDap();
b.display();
}
}
50
Sử dụng super() để gọi contructor của lớp cha
Trong java, super()
được sử dụng để gọi trực tiếp constructor của lớp cha.
class Xe {
Xe() {
System.out.println("Xe được tạo");
}
}
class XeDap extends Xe {
XeDap() {
super();// gọi Constructor của lớp cha
System.out.println("Xe đạp được tạo");
}
public static void main(String args[]) {
XeDap b = new XeDap();
}
}
Xe được tạo
Xe đạp được tạo
Như chúng ta đã biết constructor được tạo ra tự động bởi trình biên dịch nhưng nó cũng thêm super()
vào câu lệnh đầu tiên. Nếu bạn tạo constructor và bạn không có this()
hoặc super()
ở dòng lệnh đầu tiên, trình biên dịch sẽ cung cấp super()
của Constructor.
Chú ý: ta không thể dùng nhiều từ khoá này để chỉ lớp ông, lớp cụ… chẳng hạn viết như sau là sai: super.super.add(1,4);
class Xe {
Xe() {
System.out.println("Xe đã được tạo");
}
}
public class XeDap extends Xe {
int speed;
XeDap(int speed) {
this.speed = speed;
System.out.println(speed);
}
public static void main(String args[]) {
XeDap b = new XeDap(10);
}
}
Xe được tạo
10
Super được sử dụng để gọi phương thức của lớp cha
Từ khóa super
cũng có thể được sử dụng để gọi phương thức của lớp cha. Nó nên được sử dụng trong trường hợp lớp chứa các phương thức tương tự như lớp cha như trong ví dụ dưới đây
class Nguoi {
void xinChao() {
System.out.println("Xin chao");
}
}
public class HocSinh extends Nguoi {
void xinChao() {
System.out.println("Xin chao Thaycacac");
}
void display() {
message();// gọi phương thức message() của lớp hiện tại
super.message();// gọi phương thức message() của lớp cha
}
public static void main(String args[]) {
HocSinh hocSinh = new HocSinh();
hocSinh.display();
}
}
Xin chao Thaycacac
Xin chao