2012-04-12 25 views
7

Điều này có vẻ giống như một câu hỏi ngớ ngẩn, nhưng tôi muốn biết "các phương pháp hay nhất" khi tạo phương pháp trừu tượng. Tầm nhìn của họ có được công khai hay được bảo vệ không?Khả năng hiển thị tiêu chuẩn cho các phương pháp trừu tượng

Mặc dù lớp con triển khai phương pháp trừu tượng sẽ được công khai, bạn vẫn nên duy trì phương pháp trừu tượng được bảo vệ?

Trả lời

10

Phụ thuộc vào trường hợp sử dụng của bạn. Nếu phương thức trừu tượng chỉ thực hiện một số phần của một chức năng lớn hơn có sẵn từ một phương thức công khai trong lớp trừu tượng của bạn, thì nó có lẽ nên được bảo vệ. Nếu nó là một phương thức độc lập có thể/nên được gọi từ một lớp khác, hãy đặt nó ở chế độ công khai.

Ví dụ:

public abstract class Foo implements Closeable { 
    public final void close() { 
     // do whatever 
     doClose(); 
    } 

    protected abstract void doClose(); 
} 

public abstract class Bar { 
    public void read(byte[] b) { 
     for(int x = 0; x < b.length; x++) { 
      b[x] = read(); 
     } 
    } 

    public abstract int read(); 
} 
1

Tôi đoán điều đó phụ thuộc vào phương thức thực hiện. Nếu nó là một cái gì đó đại diện cho hành vi của lớp (và lớp con), nó sẽ được công khai. Nếu phương thức được thực hiện bởi các lớp con là nội bộ và được sử dụng bởi các phương thức khác của lớp cơ sở (như định nghĩa một chiến lược thuật toán), nó phải được bảo vệ.

2

Đây là sự khác biệt cho công chúng, bảo vệ và tư nhân:

Modifier

Đối với phương pháp nếu bạn thiết lập nào nó có thể được truy cập đến tất cả các lớp học trong tất cả các gói trong dự án của bạn, nếu bạn thiết lập bảo vệ nó chỉ có thể được truy cập vào tất cả các lớp trong cùng một gói hoặc lớp con mở rộng lớp trừu tượng.

Đối với câu hỏi số. 2: Vâng, đúng vậy.

+3

Đó không phải là những gì anh ta hỏi. Ông hỏi những gì thực hành tốt nhất là cho một lớp trừu tượng, không cho định nghĩa của công/tư/bảo vệ. –

+1

Có, và anh ta có thể quyết định những gì anh ta muốn chọn công khai hoặc được bảo vệ dựa trên lời giải thích của tôi. – Crazenezz

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