Từ khóa super trong Java
Từ khóa super trong Java là một biến tham chiếu mà được sử dụng để tham chiếu đến đối tượng lớp cha gần nhất. Để tìm hiểu về từ khóa super, mời bạn đọc cùng tham khảo bài viết dưới đây của eLib.VN
Mục lục nội dung
1. Sử dụng từ khóa super trong Java
Trong java, từ khóa super có 3 cách sử dụng như sau:
-
super được sử dụng để tham chiếu biến instance của lớp cha gần nhất.
-
super() được sử dụng để triệu hồi Constructor của lớp cha gần nhất.
-
super được sử dụng để triệu hồi phương thức của lớp cha gần nhất.
Phần tiếp theo, chúng ta sẽ tìm hiểu chi tiết từng sự sử dụng của từ khóa super trong Java.
2. Tham chiếu biến instance của lớp cha gần nhất
Vấn đề xảy ra nếu không có từ khóa super:
class Vehicle {
int speed = 50;
}
class Bike3 extends Vehicle {
int speed = 100;
void display() {
System.out.println(speed); //se in speed cua Bike
}
public static void main(String args[]) {
Bike3 b = new Bike3();
b.display();
}
}
Trong ví dụ trên, cả hai lớp Vehicle và Bike có cùng thuộc tính speed chung. Biến instance của lớp hiện tại được tham chiếu bởi instance theo mặc định, nhưng mình phải tham chiếu tới biến instance của lớp cha, và đó là tại sao chúng ta sử dụng từ khóa super để phân biệt giữa biến instance của lớp cha và biến instance của lớp hiện tại.
Xử lý vấn đề với từ khóa super trong Java:
//Chuong trinh vi du tu khoa super
class Vehicle {
int speed = 50;
}
class Bike4 extends Vehicle {
int speed = 100;
void display() {
System.out.println(super.speed); //bay gio se in speed cua Vehicle
}
public static void main(String args[]) {
Bike4 b = new Bike4();
b.display();
}
}
3. Triệu hồi Constructor của lớp cha gần nhất
Bạn theo dõi ví dụ sau:
class Vehicle {
Vehicle() {
System.out.println("Vehicle duoc tao");
}
}
class Bike5 extends Vehicle {
Bike5() {
super(); //se trieu hoi constructor cua lop cha
System.out.println("Bike duoc tao");
}
public static void main(String args[]) {
Bike5 b = new Bike5();
}
}
Qua các chương trước, chúng ta đã biết rằng constructor mặc định được cung cấp bởi Compiler nhưng nó cũng thêm super() cho lệnh đầu tiên. Nếu bạn đang tạo constructor cho riêng mình và bạn không có this() hoặc super() như là lệnh đầu tiên, thì Compiler sẽ cung cấp super() như là lệnh đầu tiên của Constructor đó.
Một ví dụ khác về từ khóa super, trong ví dụ này super() được cung cấp ngầm định bởi Compiler.
class Vehicle {
Vehicle() {
System.out.println("Vehicle duoc tao");
}
}
class Bike6 extends Vehicle {
int speed;
Bike6(int speed) {
this.speed = speed;
System.out.println(speed);
}
public static void main(String args[]) {
Bike6 b = new Bike6(10);
}
}
4. Triệu hồi phương thức của lớp cha gần nhất
Từ khóa super cũng có thể được sử dụng để triệu hồi phương thức lớp cha gần nhất. Nó nên được sử dụng trong lớp con mà có chứa cùng phương thức như lớp cha, như trong ví dụ sau:
class Person {
void message() {
System.out.println("Chao mung");
}
}
class Student16 extends Person {
void message() {
System.out.println("Chao mung ban den voi java");
}
void display() {
message(); //se trieu hoi phuong thuc message() cua lop hien tai
super.message(); //se trieu hoi phuong thuc message() cua lop cha
}
public static void main(String args[]) {
Student16 s = new Student16();
s.display();
}
}
Trong ví dụ trên, cả hai lớp Student và Person cùng có phương thức message(), nếu chúng ta gọi phương thức message() từ lớp Student, nó sẽ gọi phương thức message() của lớp Student chứ không phải của lớp Person bởi vì quyền ưu tiên cục bộ.
Trong tình huống mà không có phương thức nào của lớp con giống lớp cha, thì không cần sử dụng từ khóa super. Trong ví dụ dưới đây, phương thức message() được triệu hồi từ lớp Student, nhưng lớp Student không có phương thức message() này, vì thế bạn có thể trực tiếp gọi phương thức message().
Ví dụ chương trình không cần từ khóa super:
class Person {
void message() {
System.out.println("Chao mung");
}
}
class Student17 extends Person {
void display() {
message(); //se trieu hoi phuong thuc message() cua lop cha
}
public static void main(String args[]) {
Student17 s = new Student17();
s.display();
}
}
Trên đây là bài viết của eLib.VN về từ khóa super trong Java. Để hiểu rõ cặn kẽ về từ khóa super trong Java, bạn đọc cần tham khảo nhiều nguồn tài liệu, tham gia các khóa học, nghiên cứu sâu hơn về super. Chúc các bạn thành công.
Tham khảo thêm
- doc Đối tượng và lớp (class) trong Java
- doc Phương thức trong Java
- doc Nạp chồng phương thức trong Java
- doc Constructor trong Java
- doc Từ khóa static trong Java
- doc Từ khóa this trong Java
- doc Tính kế thừa trong Java - Từ khóa extends và implements trong Java
- doc Ghi đè phương thức trong Java
- doc Kiểu trả về covariant trong Java
- doc Từ khóa final trong Java
- doc Tính đa hình trong Java
- doc Gắn kết tĩnh và Gắn kết động (Dynamic Binding) trong Java
- doc Toán tử instanceof trong Java
- doc Tính trừu tượng trong Java
- doc Abstract Class trong Java
- doc Interface trong Java
- doc Phân biệt lớp abstract và Interface trong Java
- doc Package trong Java
- doc Các kiểu Modifier trong Java
- doc Access Modifier trong Java
- doc Non Access Modifier trong Java
- doc Tính đóng gói trong Java
- doc Lớp Object trong Java
- doc Nhân bản đối tượng trong Java
- doc Mảng (Array) trong Java
- doc Lớp Wrapper trong Java
- doc Truyền giá trị và tham chiếu trong Java
- doc Từ khóa strictfp trong Java
- doc Regular Expression trong Java