Từ khóa super trong Java

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.

image

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.

Xe đạp thừa kế lớp cha, tốc độ của lớp cha là 50, tốc độ lớp con là 100, nếu không sử dụng super thì khi in tốc độ ra chúng ta sẽ được kết quả là của lớp con
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();
    }
}
Kết quả
100
Nếu chúng ta sử dụng super thì sẽ in ra được tốc độ của lớp cha
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();

    }
}
Kết quả
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();
    }
}
Kết quả
Xe được tạo
Xe đạp được tạo
super() được tự động thêm vào mỗi Constructor của class bởi trình biên dịch.

image

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);
    }
}
Kết quả
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();
    }
}
Kết quả
Xin chao Thaycacac
Xin chao
Avatar Administrator

Administrator

@thaycacac
Lòng tin cũng giống như một tờ giấy, khi đã nhàu nát sẽ không bao giờ phẳng phiu được.
Logo thể loại Java

Java

Chuyên mục học lập trình
Học Java từ cơ bản đến thông thạo cho mọi đối tượng
hello