2014-09-25 12 views
6

Bất cứ ai có thể cho tôi biết cách sử dụng phương thức chính làm java cuối cùng.Tại sao chúng ta được phép có một phương thức chính thức cuối cùng trong java?

trong khi điều này được cho phép trong java

public static final void main(String[] args) { 



} 

Tôi không thấy bất kỳ sử dụng làm cho nó thức. anyways nó là tĩnh vì vậy chúng tôi không thể ghi đè lên nó.

+0

Trừ khi bạn đang sử dụng phương pháp này 'main' cho bất cứ điều gì khác hơn là bắt đầu ứng dụng của bạn, có hoàn toàn không có lý do gì để làm cho nó' final'. –

Trả lời

10

Thêm final vào phương pháp tĩnh thực sự có thể tạo sự khác biệt. Xét đoạn mã sau:

class A { 
    public static void main(String[] args) { 
     System.out.println("A"); 
    } 
} 

class B extends A { 
    public static void main(String[] args) { 
     System.out.println("B"); 
    } 
} 

class C extends B { 
} 

public class Test { 
    public static void main(String[] args) { 
     C.main(args); // Will invoke B.main 
    } 
} 

Thêm final-A.main sẽ ngăn chặn tình cờ cất giấu A.main. Nói cách khác, việc thêm final vào A.main không được phép đảm bảo rằng không được phép và do đó, C.main do đó in "A" trái ngược với ví dụ "B".

Tại sao chúng ta được phép có phương thức chính thức cuối cùng trong java?

Bên cạnh trường hợp góc trên, thêm final đến một phương pháp tĩnh không làm cho nhiều sự khác biệt, vì vậy tôi không thấy một điểm lớn trong việc thêm một quy tắc cho không cho phép nó.

biết thêm thông tin có sẵn ở đây: Behaviour of final static method

+3

'final' sẽ ngăn ẩn một phương thức' static'. –

+0

Tôi đã thử thêm phương thức cuối cùng vào phương thức chính của A, lớp hiện đang gặp lỗi biên dịch trong Lớp B - ** Không thể ghi đè phương thức cuối cùng từ A **. Tôi đang sử dụng Java 1.7. Câu trả lời này có hợp lệ không? – gyan

+0

@gyan, tôi không theo bạn. Phần nào bạn nghĩ là không hợp lệ? – aioobe

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