Em đọc một số tài liệu trên mạng nhưng vẫn thấy khá mơ hồ về 2 khái niệm này. Mong được mọi người giải đáp(Có code mẫu thì càng hay ạ). Em cảm ơn
Nhờ giải đáp sự khác và giống nhau giữa interface và abstract class trong c#
giống nhau là chúng đều trừu tượng. hàm khai báo không cần thân. kiểu như phác thảo.
khác nhau là bạn dùng class để định nghĩa đối tượng mới. còn interface dùng để tạo giao diện giao tiếp, giống như bạn có cái phích cắm có 3 chân (class khai báo như thế) nhưng ổ cắm nhà bạn chỉ có 2 lỗ. thì muốn cắm cái phích này vào ổ thì phải có cái gì đó nằm ở giữa. lúc này cái phích (class) 3 lỗ sẽ gắn thêm (implement) một cái chuyển đổi (interface) để có thể cắm vào cái ổ có 2 lỗ. Bây giờ nếu cái phích bạn implements rất nhiều interface khác nhau ví dụ 2 chân, 5 chân và n chân chẳng hạn. thì bạn có thể dùng cái phích này với tất cả các loại ổ cắm 2 lỗ, 5 lỗ và n lỗ.
Tất nhiên là có điểm tương đồng và điểm khác rồi.
Sơ qua thì:
-
Giống: cả 2 đều ở dạng
trừu tượng
, không thể tạo đối tượng trực tiếp từ nó bằng từ khóanew
. Đều tạo một khuôn mẫu (nguyên mẫu) chung cho các lớp sẽtriển khai
(implement
) nó. Nguyên mẫu sẽ quy định tên phương thức, kiểu/số lượng tham số, kiểu trả về… -
Khác:
- Interface (Giao tiếp): không có một phương thức nào được xây dựng (triển khai) sẵn. Tất cả chỉ được khai báo. Các lớp triển khai bắt buộc phải xây dựng nội dung bên trong tất cả phương thức đã được khai báo.
- Abstract class (Lớp trừu tượng): có thể có một vài phương thức được xây dựng nội dung luôn, đồng thời có thể tạo các trường (field) lưu dữ liệu cho lớp. Các lớp kế thừa chỉ cần triển khai các phương thức chưa được xây dựng nội dung, và vẫn có thể ghi đè (
Override
) các phương thức trước.