Điểm khác nhau giữa Class, Abstract Class và Interface. Class nội là gì?

Mục đích của hướng đối tượng là nhằm tổ chức mã nguồn tốt hơn, mã nguồn có khả năng tái sử dụng và làm cho lập trình giống như việc tổ chức quản các đối tượng trên thế giới thưc. Người ta “đẻ” ra cái khái niệm về Class, abstract class, interface, inner class nhằm phục vụ cho mục đích này.

Lấy ví dụ cổ điển
##Abstract class
Giả sử bạn có hai lớp là ConNguoi và ConCho, có một thuộc tính là viTri. Cả hai lớp này đều có một hàm thaydoiViTri, nhận vào một tọa độ và cập nhật tọa độ mới cho hai đối tượng thuộc hai lớp này. Như vậy bạn phải viết hai đoạn mã nguồn giống nhau cho hai lớp khác nhau.

Vậy có cách nào tái sử dụng đoạn mã nguồn này không? Bạn có thể tạo một lớp cha của hai lớp này là lớp DongVat, cài đặt phương thức thaydoiViTri. Nhưng điều này sẽ gây ra vấn đề khi có một người khác sử dụng thư viện do bạn viết ra, người ta có thể tạo một đối tượng của lớp ĐộngVật mà thực tế, đối tượng đó không có ý nghĩa và sẽ làm sai hoạt động của thư viện bạn viết ra.

Lúc đó người ta nghĩ ra khái niệm abstract class, là một lớp nhưng không thể tạo ra thực thể. Về mặt kỹ thuật, abstract class có thể chứa hoặc không chứa phương thức abstract – một phương thức chỉ có khai báo mà không chứa cài đặt.

##Interface
Ở C++, không tồn tại khái niệm interface về mặt kỹ thuật, nhưng ở java lại có, nguyên nhân thì tạm thời bỏ qua nhưng bạn có thể tìm hiểu để hiểu rõ hơn về interface. Interface nó giống như một hợp đồng, nói rằng những lớp nào implement interface này phải thực hiện dược những hàm được khai báo trong interface đó.

Lấy tiếp ví dụ ở trên. Giả sử ở đâu đó bạn có một hàm thay đổi vị trí cho một object. Bạn có thể viết hàm thay đổi vị trí cho Người, cho Động Vật, cho Con Chó, nhưng giả sử có thêm một lớp nữa là lớp Xe thì sao? Có cách nào để biết một đối tượng bất kỳ có thể di chuyển được không? Khi đó, bạn có thể tạo một interface tên là Movable, và yêu cầu bất kỳ lớp nào implement phương thức này đều phải cài đặt một phương thức là thaydoiViTri.

##Inner class
Inner Class, là một lớp bạn chỉ sử dụng bên trong một lớp/ một phương thưc/ một đoạn chương trình, mục tiêu chính là làm cho việc tổ chức mã nguồn rõ ràng hơn. Inner class có rất nhiều loại, thông thường inner class được dùng để xử lý sự kiện, viết xử lý cho multithread job v.v… Mình mới chỉ xài những cái đó, còn ứng dụng khác thì mình không rõ lắm.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *