2012-02-27 12 views
7

Trong các nguồn khác nhau, tôi đã đọc những điều khác nhau về chủ đề. Ví dụ: Wikipedia nói:Dynamic binding == late binding trong Java hay không?

Ràng buộc trễ thường bị nhầm lẫn với công văn động, nhưng có sự khác biệt đáng kể.

Tuy nhiên, một vài dòng sau

nó là phổ biến để sử dụng thuật ngữ cuối ràng buộc trong lập trình Java như một từ đồng nghĩa với cử động. Cụ thể, điều này đề cập đến cơ chế gửi đơn của Java được sử dụng với các phương thức ảo.

Vậy sự thật và "sự khác biệt đáng kể" ở đâu?

+1

Bạn đang đề cập đến tải Lười biếng? – bmoran

+1

@ bmoran: Không. Anh ấy đang nói về một thứ ngôn ngữ cơ bản hơn. Xem http://en.wikipedia.org/wiki/Late_binding#Late_binding_in_Java và http://en.wikipedia.org/wiki/Dynamic_dispatch. – Asaph

Trả lời

6

Công văn đơn ràng buộc và động duy nhất là, cho tất cả các ý định và mục đích, giống nhau. Trong công văn đơn động, giá trị hoặc nhận dạng của một đối tượng duy nhất xác định mã nào được gọi khi chạy, và đó là những gì xảy ra trong Java.

Thuật ngữ động văn nói chung thường được sử dụng để ám chỉ năng động nhiều công văn, mà là nơi các phương pháp runtime được chọn trong thời gian chạy dựa trên bản sắc hoặc giá trị của nhiều hơn một đối tượng, đó là một tính năng ngôn ngữ trong CLOS và Smalltalk, nhưng không phải trong Java hoặc C++.

+1

+1, nhưng tôi muốn mô tả "ràng buộc trễ" như lời kêu gọi ràng buộc đầy đủ của một ngôn ngữ như Python, trong khi mô hình đơn động của Java thực sự là một phần ràng buộc một phần, sớm, giống như phương pháp ảo C++ . –

+0

Tôi đã giả định rằng gọi động được thêm vào trong Java 7 thực hiện công văn động. http://java.sun.com/developer/technicalArticles/DynTypeLang/ Sự khác biệt là gì? –

+0

@DanielPryden - thực sự, tôi đồng ý với điều đó. Những gì bạn đang gọi là "hoàn toàn muộn ràng buộc," tôi gọi là "gõ vịt"; đây là cơ bản dựa trên phương pháp chứ không phải là tra cứu dựa trên loại. –