2008-10-25 69 views
20

Có thực hành tốt để cho các lớp trừu tượng định nghĩa các biến mẫu không?Java - Lớp trừu tượng có chứa các biến?

public abstract class ExternalScript extends Script { 

    String source; 

    public abstract void setSource(String file); 

    public abstract String getSource(); 
} 

Lớp phụ, ExternalJavaScript.class, sau đó sẽ tự động nhận được các biến nguồn nhưng tôi cảm thấy nó dễ dàng hơn để đọc mã nếu tất cả các lớp tiểu tự xác định nguồn gốc, thay vì từ thừa kế.

Lời khuyên của bạn là gì?

/Adam

Trả lời

29

Tôi đã nghĩ rằng một cái gì đó như thế này sẽ tốt hơn nhiều, vì bạn đang thêm một biến, vậy tại sao không giới hạn truy cập và làm cho nó sạch hơn? Người nhận/người định cư của bạn nên làm những gì họ nói trên tin.

public abstract class ExternalScript extends Script { 

private String source; 

public void setSource(String file) { 
    source = file; 
} 

public String getSource() { 
    return source; 
} 

Đưa câu trả lời này trở lại câu hỏi, bạn có bao giờ quan tâm đến mã getter/setter khi đọc nó không? Nếu tất cả họ đều nhận được và thiết lập thì bạn không cần phải lo lắng về chức năng 'làm' khi đọc mã. Có một vài lý do khác để suy nghĩ về quá:

  • Nếu nguồn được bảo vệ (do đó có thể truy cập bởi các lớp con) thì mã bị lộn xộn: ai đang thay đổi biến? Khi đó là một đối tượng thì nó trở nên khó khăn khi bạn cần phải cấu trúc lại, trong khi một phương pháp có xu hướng làm cho bước này dễ dàng hơn.
  • Nếu phương pháp getter/setter của bạn không nhận được và thiết lập, sau đó mô tả chúng như một cái gì đó khác.

Luôn luôn nghĩ lớp học của bạn có thực sự khác hay không, và điều đó sẽ giúp quyết định xem bạn có cần gì hơn không.

6

Chắc chắn .. Tại sao không?
Lớp cơ bản trừu tượng chỉ là sự tiện lợi cho hành vi và dữ liệu chung của nhà ở từ 2 lớp trở lên ở một nơi duy nhất để tiết kiệm hiệu quả và bảo trì. Đó là một chi tiết thực hiện.
Tuy nhiên, hãy cẩn thận rằng bạn không sử dụng lớp cơ sở trừu tượng nơi bạn nên sử dụng giao diện. Hãy tham khảo Interface vs Base class

1

Tất nhiên. Toàn bộ ý tưởng của các lớp trừu tượng là chúng có thể chứa một số hành vi hoặc dữ liệu mà bạn yêu cầu tất cả các lớp con chứa. Hãy nghĩ về ví dụ đơn giản của WheeledVehicle - nó sẽ có một biến thành viên numWheels. Bạn muốn tất cả các lớp con có biến này. Hãy nhớ rằng các lớp trừu tượng là một tính năng rất hữu ích khi phát triển các API, vì chúng có thể đảm bảo rằng những người mở rộng API của bạn sẽ không phá vỡ nó.

Các vấn đề liên quan