Java - Lớp và Giao diện Đóng băng

Xin chào các bạn, những nhà phát triển Java tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình hấp dẫn vào thế giới Lớp và Giao diện Đóng băng trong Java. Đừng lo nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ những khái niệm cơ bản và tiến hóa lên. Vậy, hãy lấy ly cà phê (hoặc đồ uống yêu thích của bạn), và hãy bắt đầu!

Java - Sealed Classes

Lớp và Giao diện Đóng băng là gì?

Hãy tưởng tượng bạn đang xây dựng một cây nhà và bạn muốn kiểm soát ai có thể thêm phòng vào đó. Đó chính là điều gì lớp và giao diện đóng băng làm trong Java - chúng cho phép bạn kiểm soát các lớp nào có thể mở rộng hoặc thực hiện chúng. Như có một danh sách VIP cho mã của bạn!

Vấn đề mà Lớp Đóng băng giải quyết

Trước khi có lớp đóng băng, bất kỳ ai cũng có thể mở rộng lớp của bạn hoặc thực hiện giao diện của bạn. Như tổ chức một buổi tiệc mà không biết ai sẽ xuất hiện! Lớp đóng băng giúp bạn có quyền kiểm soát danh sách khách mời.

Cách tạo Lớp Đóng băng

Hãy bắt đầu với một ví dụ đơn giản:

public sealed class Animal permits Dog, Cat, Bird {
    // mã của lớp Animal ở đây
}

Trong ví dụ này, Animal là lớp đóng băng của chúng ta. Từ khóa permits như là bouncer, chỉ cho phép các lớp Dog, Cat, và Bird mở rộng Animal.

Mở rộng Lớp Đóng băng

Bây giờ, hãy xem cách chúng ta có thể tạo các lớp mở rộng lớp Animal của chúng ta:

public final class Dog extends Animal {
    // mã của lớp Dog ở đây
}

public final class Cat extends Animal {
    // mã của lớp Cat ở đây
}

public non-sealed class Bird extends Animal {
    // mã của lớp Bird ở đây
}

Nhận thấy các từ khóa finalnon-sealed. Những này rất quan trọng:

  • final: Điều này có nghĩa là lớp không thể mở rộng thêm. Như nói, "Buổi tiệc kết thúc ở đây!"
  • non-sealed: Điều này cho phép lớp có thể mở rộng bởi bất kỳ lớp nào. Như nói, "Hãy vào, càng nhiều càng tốt!"

Giao diện Đóng băng

Tương tự như lớp, giao diện cũng có thể đóng băng. Dưới đây là một ví dụ:

public sealed interface Vehicle permits Car, Motorcycle, Bicycle {
    // mã của giao diện Vehicle ở đây
}

Và đây là cách chúng ta thực hiện giao diện này:

public final class Car implements Vehicle {
    // mã của lớp Car ở đây
}

public final class Motorcycle implements Vehicle {
    // mã của lớp Motorcycle ở đây
}

public non-sealed class Bicycle implements Vehicle {
    // mã của lớp Bicycle ở đây
}

Tại sao sử dụng Lớp và Giao diện Đóng băng?

  1. An toàn kiểu dữ liệu: Bạn biết chính xác các lớp nào có thể mở rộng hoặc thực hiện lớp đóng băng hoặc giao diện của bạn.
  2. Thiết kế tốt hơn: Nó giúp bạn tạo ra một hệ thống lớp cấu trúc và ý định hơn.
  3. So sánh mẫu: Nó hoạt động tuyệt vời với các biểu thức so sánh trong các biểu thức switch (chủ đề cho một ngày khác, nhưng tin tôi, nó rất cool!).

Ví dụ thực tế

Hãy tạo một ví dụ phức tạp hơn. Tưởng tượng chúng ta đang xây dựng một trò chơi đơn giản với các loại nhân vật khác nhau:

public sealed abstract class GameCharacter permits Warrior, Mage, Archer {
    protected String name;
    protected int health;

    public GameCharacter(String name, int health) {
        this.name = name;
        this.health = health;
    }

    public abstract void attack();
}

public final class Warrior extends GameCharacter {
    public Warrior(String name) {
        super(name, 100);
    }

    @Override
    public void attack() {
        System.out.println(name + " swings a mighty sword!");
    }
}

public final class Mage extends GameCharacter {
    public Mage(String name) {
        super(name, 75);
    }

    @Override
    public void attack() {
        System.out.println(name + " casts a powerful spell!");
    }
}

public non-sealed class Archer extends GameCharacter {
    public Archer(String name) {
        super(name, 80);
    }

    @Override
    public void attack() {
        System.out.println(name + " fires a precise arrow!");
    }
}

Trong ví dụ này, chúng ta đã tạo ra một lớp đóng băng trừu tượng GameCharacter với ba lớp con được phép: Warrior, Mage, và Archer. Mỗi lớp con có cách thực hiện riêng của phương thức attack().

Hãy xem cách chúng ta có thể sử dụng các lớp này:

public class Game {
    public static void main(String[] args) {
        GameCharacter[] characters = {
            new Warrior("Conan"),
            new Mage("Gandalf"),
            new Archer("Legolas")
        };

        for (GameCharacter character : characters) {
            character.attack();
        }
    }
}

Khi bạn chạy mã này, bạn sẽ thấy:

Conan swings a mighty sword!
Gandalf casts a powerful spell!
Legolas fires a precise arrow!

Kết luận

Lớp và giao diện đóng băng là các công cụ mạnh mẽ trong Java cho phép bạn tạo ra các hệ thống lớp kiểm soát và ý định hơn. Chúng như những bouncer của mã của bạn, đảm bảo chỉ các lớp đúng mới được tham gia buổi tiệc!

Nhớ rằng, lập trình là về việc giải quyết vấn đề và tạo cấu trúc. Lớp và giao diện đóng băng chỉ là một công cụ thêm trong tủ công cụ của bạn để giúp bạn viết mã sạch và dễ bảo trì hơn.

Tiếp tục tập luyện, tiếp tục mã hóa, và nhất quan, hãy thích thú! Trước khi bạn biết, bạn sẽ đóng băng lớp như một chuyên gia. Chờ đợi buổi gặp lại tiếp theo, chúc mã hóa vui vẻ!

Phương thức Mô tả
permits Xác định các lớp nào được phép mở rộng lớp đóng băng hoặc thực hiện giao diện đóng băng
sealed Đặt lớp hoặc giao diện là đóng băng
non-sealed Cho phép lớp con của lớp đóng băng mở rộng bởi bất kỳ lớp nào
final Ngăn không cho lớp mở rộng thêm

Credits: Image by storyset