Đáp án đúng: B
Đa hình (Polymorphism) là một khái niệm quan trọng trong lập trình hướng đối tượng, cho phép các đối tượng thuộc các lớp khác nhau có thể được xử lý thông qua một giao diện chung. Trong ngữ cảnh của câu hỏi này, đa hình xảy ra khi một lớp con (subclass) kế thừa một phương thức từ lớp cha (superclass) và định nghĩa lại (ghi đè - override) phương thức đó để cung cấp một cách thực hiện (implementation) khác, phù hợp hơn với ngữ cảnh của lớp con. Tuy nhiên, phương thức ghi đè này phải tuân thủ một số quy tắc quan trọng để đảm bảo tính nhất quán và khả năng thay thế (substitutability).
Phân tích các đáp án:
* **A. Ghi đè các phương thức của lớp cha nhưng vẫn duy trì việc triển khai.**
* Đáp án này không chính xác hoàn toàn. Mặc dù lớp con *ghi đè* phương thức của lớp cha, nhưng mục đích của việc ghi đè là để *thay đổi* cách triển khai (implementation), không phải để duy trì nó. Nếu vẫn duy trì việc triển khai thì việc ghi đè trở nên vô nghĩa.
* **B. Duy trì cũng kiểu trả về và các tham số như lớp cha, nhưng cách thực hiện khác nhau.**
* Đây là đáp án chính xác nhất. Đa hình đạt được thông qua việc ghi đè phương thức, trong đó lớp con cung cấp một cách thực hiện khác của phương thức đó, nhưng vẫn giữ nguyên kiểu trả về và danh sách tham số. Điều này đảm bảo rằng các đối tượng của lớp con có thể được sử dụng thay thế cho các đối tượng của lớp cha mà không gây ra lỗi (nguyên tắc thay thế Liskov).
* **C. Có kiểu trả về và tham số khác với lớp cha.**
* Nếu kiểu trả về và tham số khác với lớp cha, thì đây không còn là ghi đè phương thức (override) mà là nạp chồng phương thức (overload). Nạp chồng phương thức là một khái niệm khác, không liên quan trực tiếp đến đa hình theo nghĩa ghi đè.
* **D. Là ảo**
* Tính ảo (virtual) liên quan đến việc khai báo phương thức ảo trong lớp cha, cho phép lớp con ghi đè phương thức đó. Tuy nhiên, bản thân việc là ảo không phải là định nghĩa của đa hình. Một phương thức ảo chỉ là một cơ chế để *cho phép* đa hình xảy ra, không phải là bản chất của đa hình.
Vì vậy, đáp án chính xác nhất là B.