Từ khóa super trong Java

0 phút đọc

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.

Từ khóa super trong Java

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.

Ví dụ: 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

Ví dụ: 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 constructor 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

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào

Avatar TechMely Team
Được viết bởi

TechMely Team

Chẳng có gì trở nên dễ dàng hơn. Chỉ là bạn trở nên mạnh mẽ hơn mà thôi.