2010-10-03 27 views
18

Có thể định nghĩa một lớp trừu tượng riêng trong Java không? Làm thế nào một nhà phát triển Java viết một cấu trúc như dưới đây?Java: cách triển khai các phương pháp trừu tượng riêng tư?

public abstract class MyCommand { 
    public void execute() 
    { 
     if (areRequirementsFulfilled()) 
     { 
      executeInternal(); 
     } 
    } 
    private abstract void executeInternal(); 
    private abstract boolean areRequirementsFulfilled(); 
} 

Trả lời

40

Bạn không thể có private abstract phương pháp trong Java.

Khi phương thức là private, các lớp phụ không thể truy cập vào nó, do đó chúng không thể ghi đè lên.

Nếu bạn muốn có hành vi tương tự, bạn sẽ cần phương pháp protected abstract.

Đó là một lỗi thời gian biên dịch nếu một tuyên bố phương pháp có chứa các từ khóa abstract cũng chứa bất kỳ một trong những từ khóa private, static, final, native, strictfp, hoặc synchronized.

Nó sẽ là không thể đối với một lớp con để thực hiện một phương pháp private abstract, vì private phương pháp không được thừa kế bởi các lớp con; do đó một phương pháp như vậy không bao giờ có thể được sử dụng.


Resources:

+3

Cũng không phải trong C# ...... –

+2

Thực ra, các phương pháp riêng * có thể được truy cập bởi các lớp con - miễn là các lớp con đó được bao quanh bởi lớp siêu. – gustafc

+0

@gustafc, mặc dù vậy, nếu lớp của bạn được đặt trong lớp siêu bạn có hai lựa chọn, lớp này là tĩnh, thì phương thức trừu tượng không thể truy cập được (không phải từ môi trường tĩnh) hoặc lớp không tĩnh nhưng để có một cá thể của lớp con, bạn cần một cá thể từ lớp siêu không thể diễn tả được (vì nó trừu tượng) cũng không thể mở rộng từ bên ngoài. –

6

Đó sẽ là protected thay vì private. Điều đó có nghĩa là chỉ các lớp mở rộng MyCommand mới có quyền truy cập vào hai phương pháp. (Vì vậy, tất cả các lớp học từ cùng một gói, nhưng đó là một điểm nhỏ.)

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