Thắc mắc về enum trong java

Dạ cho em hỏi đoạn Category.ONE.name()), rõ ràng trong Category không có hàm name nhưng ONE vẫn gọi được .name(). Em còn khó hiểu khi .ONE.name().ONE.name đều ra cùng 1 kết quả.

public enum Category {
        ONE("one"),
        TWO ("two"),
        THREE("three");

        private final String name;

        Category(String s) {
            name = s;
        }

    }

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(Category.ONE.name());
    }
}

Enum là cũng là một class đặc biệt, mặc định có phương thức name() để lấy tên element.
Ví dụ enum Category thì Category.ONE là một object của enum đó.

Nếu gọi Category.ONE.name() thì là gọi phương thức name(), kết quả là ONE.
Còn gọi Category.ONE.name thì là gọi thuộc tính tên name, kết quả là one (dòng số 2).

Code trên đúng ra gọi .name sẽ không chạy do field là private.

7 Likes

Tớ đồng ý với câu trả lời của @tonghoangvu.
Tớ chỉ bổ sung thêm chút background về method name() thôi.
Tất cả các enum trong Java đều kế thừa class java.lang.Enum. Cậu có thể thấy method name() được thừa hưởng từ class này.

Hope it helps!

7 Likes

Em cảm ơn ạ, vì câu trả lời của anh library đã bao gồm và tiếp nối câu trả lời của anh Vuio nên em mark Solution post sau.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?