Mục lục bài viết

1. Từ khóa super trong Java dùng để làm gì?

Từ khóa super trong Java giúp lớp con (subclass) truy cập thành phần của lớp cha (superclass):

    • Giúp gọi phương thức của lớp cha được ghi đè (overriding) trong lớp con
    • Giúp truy cập các thuộc tính của lớp cha nếu cả lớp con và lớp cha có các thuộc tính giống tên nhau
    • Giúp gọi hàm khởi tạo có tham số hoặc không có tham số của lớp cha

2. Từ khóa super giúp truy cập phương thức ghi đè của lớp cha

Khi phương thức bị ghi đè (overriding), lớp con gọi tên đó sẽ chạy phương thức của chính lớp con.

class LopCha{
    protected void xuat(){
        System.out.println("Lop cha.");
    }
}
class LopCon extends LopCha{
    @Override
    public void xuat(){
        System.out.println("Lop con.");
    }
}
public class Test{
    public static void main(String[] args) {
        LopCon aaa = new LopCon();
        aaa.xuat();
    }
}
Kết quả
Lop con.

Đã ghi đè mà vẫn muốn gọi phương thức của lớp cha? Dùng từ khóa super.

class LopCha{
    public void xuat(){
        System.out.println("Lop cha.");
    }
}
class LopCon extends LopCha{
    @Override
    public void xuat(){
        super.xuat();//gọi hàm xuat() của lớp cha
        System.out.println("Lop con.");
    }
}
public class Test{
    public static void main(String[] args) {
        LopCon aaa = new LopCon();
        aaa.xuat();
    }
}
Kết quả
Lop cha.
Lop con.

3. Từ khóa super giúp truy cập thuộc tính của lớp cha

Lớp cha và lớp con có thể có các thuộc tính có tên giống nhau. Chúng ta có thể sử dụng từ khóa super để gọi thuộc tính của lớp cha.

class LopCha{
    protected String type="LopCha.";
}
class LopCon extends LopCha{
    public String type="LopCon.";
    public void xuat(){
        System.out.println(type);
        //gọi thuộc tính lớp cha
        System.out.println(super.type);
    }
}
public class Test{
    public static void main(String[] args) {
        LopCon aaa = new LopCon();
        aaa.xuat();
    }
}
Kết quả
LopCon.
LopCha.

4. Từ khóa super giúp truy cập hàm khởi tạo của lớp cha

Khi tạo đối tượng lớp con, hàm khởi tạo mặc định (default constructor) của lớp cha sẽ tự động được gọi. Muốn chọn hàm khởi tạo khác của lớp cha thì dùng super().

Trong hàm khởi tạo của lớp con, chúng ta có thể gọi hàm khởi tạo của lớp cha bằng super(). super() phải nằm ở dòng đầu tiên của hàm khởi tạo lớp con.

class LopCha{
    LopCha(){
        System.out.println("LopCha.");
    }
}
class LopCon extends LopCha{
    LopCon(){
        super();
        System.out.println("LopCon.");
    }
}
public class Test{
    public static void main(String[] args) {
        LopCon aaa = new LopCon();
    }
}
Kết quả
LopCha.
LopCon.

Muốn gọi hàm khởi tạo có tham số của lớp cha, ta truyền tham số vào super().

class LopCha{
    LopCha(){
        System.out.println("LopCha.");
    }
    LopCha(String type){
        System.out.println(type + " ke thua tu LopCha.");
    }
}
class LopCon extends LopCha{
    LopCon(){
        super("LopCon");
        System.out.println("LopCon.");
    }
}
public class Test{
    public static void main(String[] args) {
        LopCon aaa = new LopCon();
    }
}
Kết quả
LopCon ke thua tu LopCha.
LopCon.

Lưu ý: Khi đã gọi hàm khởi tạo có tham số của lớp cha, trình biên dịch sẽ không tự gọi hàm khởi tạo mặc định nữa.

Tác giả

HV Lee

500+ bài viết về lập trình, phần cứng, mạng máy tính và công nghệ. Chia sẻ kiến thức từ những gì đã học, đã dạy và đã trải nghiệm — để người học CNTT hiểu sâu hơn và làm được nhiều hơn.

Gợi ý tiếp theo

Lớp trừu tượng (abstract class) trong Java

Học tiếp