2008-10-04 12 views
6

Có thể, trong Java, để thực thi rằng một lớp có một tập hợp các lớp con cụ thể và không có lớp con nào khác? Ví dụ:Có cách nào để thực hiện các loại đại số trong Java không?

public abstract class A {} 
public final class B extends A {} 
public final class C extends A {} 
public final class D extends A {} 

Tôi có thể thực thi bằng cách nào đó không có lớp con nào khác của A có thể được tạo không?

Trả lời

4

Tặng lớp A một hàm tạo có khả năng truy cập cấp gói (và không có hàm tạo khác).

Cảm ơn, Dave L., về phần không có nhà thầu khác.

+0

lớp Ngoài ra tất cả như lồng nhau với A chỉ có một constructor tin. –

+0

Đó không phải là thẩm mỹ, mặc dù: A.B, A.C ... –

+1

nhập tĩnh để giải cứu, marxidad – Apocalisp

0

Bạn có thể đặt lớp A, B, C, D trong một gói riêng biệt và làm cho lớp A không công khai.

+1

Làm cho lớp Một loại tư nhân đánh bại mục đích của các kiểu dữ liệu đại số (ví dụ, đa hình) –

3

Bạn có thể muốn có enum (Java> = 1.5). Một loại enum có thể có một tập các giá trị cố định. Và nó có tất cả các tính năng của một lớp: chúng có thể có các trường và thuộc tính, và có thể làm cho chúng triển khai một giao diện. Một enum không thể được mở rộng.

Ví dụ:

enum A { 

    B, 
    C, 
    D; 

    public int someField; 

    public void someMethod() { 
    } 


} 
+0

Nếu tôi không nhầm, trong ví dụ của bạn, B, C và D là các giá trị, không phải loại. – Apocalisp

+0

Ah, bạn nói đúng ... bạn không thể tạo ra nhiều B :-( – asterite

+0

Nhưng nó là tốt nếu bạn không muốn các kiểu con có trạng thái (trong ví dụ chúng thậm chí không thực hiện bất kỳ phương thức nào). –