Tôi đã đọc qua một số bài viết về liên kết tĩnh và liên kết động bằng Java. Và tôi có những câu dưới đây (Tôi đã tìm kiếm rất nhiều nhưng không tìm thấy bất kỳ đề cập về nó chưa):Các vấn đề với ràng buộc tĩnh và liên kết động trong Java
Ví dụ, tôi có dòng mã sau đây:
Person a = new Student(); // Student is a subclass of Person
a.speak();
gì chúng tôi đã biết là tại thời gian biên dịch, trình biên dịch sẽ kiểm tra xem có tồn tại định nghĩa phương thức cho speak()
trong lớp Person
và gọi nó nếu nó tồn tại. Và tại thời gian chạy, nó sẽ gọi phương thức speak()
của đối tượng thực tế mà a
trỏ (Đối tượng thực tế trong trường hợp này rõ ràng là Student
)
Vì vậy, câu hỏi của tôi là lý do tại sao nó không trực tiếp gọi speak()
phương thức của lớp Student
tại thời điểm biên dịch, nhưng đợi đến thời gian chạy để làm điều đó? Có lý do nào đằng sau chuyện này không?
Vì việc biên dịch phần mềm của bạn khác với việc chạy phần mềm. –
Bởi vì * bạn * đã nói với trình biên dịch rằng 'a' sẽ được coi là' Người' thay vì 'Học sinh'. Và tại sao nó phải biên dịch mã theo một cách khác với bạn yêu cầu? Bạn đang giả định lợi thế nào cho chiến lược khác nhau đó? – Holger