2012-02-04 26 views
5

Đây là mã mẫu:Loại chuyển đổi và phương pháp quá tải

public class OverloadingExample { 
public void display(Object obj){ 
    System.out.println("Inside object"); 
} 

public void display(Double doub){ 
    System.out.println("Inside double"); 
} 

public static void main(String args[]){ 
    new OverloadingExample().display(null); 
} 
} 

Output:

Bên trong đôi

Bất cứ ai có xin vui lòng giải thích cho tôi tại sao phương pháp quá tải với Double tham số được gọi là thay vì đó với Object?

Trả lời

6

Có - bởi vì Double cụ thể hơn Object. Có một chuyển đổi từ Double thành Object, nhưng không phải là cách khác, là điều làm cho nó cụ thể hơn.

Xem section 15.12.2.5 của JLS để biết thêm thông tin. Các chi tiết khá khó thực hiện nhưng điều này sẽ giúp:

Trực giác không chính thức là phương pháp đầu tiên được xử lý bằng phương pháp đầu tiên có thể được chuyển sang phương thức khác mà không biên dịch- lỗi loại thời gian.

Vì vậy, ở đây, mọi yêu cầu display(Double doub) đều có thể được xử lý bởi display(Object obj) nhưng không phải theo cách khác.

+0

Cảm ơn. "Trực giác không chính thức là một phương pháp cụ thể hơn một phương pháp khác nếu bất kỳ lời gọi nào được xử lý bởi phương thức đầu tiên có thể được truyền sang phương thức khác mà không có lỗi kiểu biên dịch." – NINCOMPOOP

+0

@noob: Yup, tôi vừa thêm chút :) –

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