Tôi đã thảo luận với đồng nghiệp, người đã nhấn mạnh rằng trong các ngôn ngữ như Java và C# không bao giờ có lý do gì để sử dụng lớp cơ sở Tóm tắt thuần túy không thể có được xung quanh việc thiếu nhiều thừa kế.Sự khác biệt giữa lớp Tóm tắt thuần túy và giao diện
Tôi cảm thấy rằng anh ấy sai về điều này, vì tôi đã luôn nghĩ rằng nếu một thứ là danh từ thì đó là một đối tượng, và nếu nó là động từ thì đó là một giao diện.
Ví dụ: nếu tôi muốn xác định loại Bird
, nơi tôi muốn thực thi phương pháp fly
mà không triển khai phương pháp đó, thì tôi sẽ tạo một lớp trừu tượng thuần túy.
Nếu tôi muốn xác định loại Flies
, tôi sẽ đặt giao diện đó theo phương thức fly
.
Bird
có thể triển khai Flies
.
Tôi có sai không?
EDIT:
Đối số rắn duy nhất tôi có thể cung cấp để hỗ trợ quan điểm của tôi là tại một số điểm trong tương lai thiết kế có thể cần phải thay đổi để chim có thể ăn. Nếu tất cả các loài chim ăn như nhau thì điều này sẽ cần phải được thêm vào Bird
, làm cho nó không trừu tượng thuần túy.
Nếu Bird
là một giao diện, thay đổi này đơn giản là một cơn ác mộng, vì tôi không biết liệu những thứ kế thừa từ một số lớp cơ sở khác cũng thực hiện giao diện Bird
của tôi.
+1 - câu hỏi hay và tôi nghĩ sẽ có nhiều lý do hợp lý được khám phá trong các câu trả lời sắp tới cho việc sử dụng lớp trừu tượng. –
Chỉ cần chọn * phần * của câu hỏi của bạn (do đó không đăng câu trả lời *): Tôi sẽ không nói rằng giao diện luôn là * động từ *. Giao diện được sử dụng một * lot * để cho phép một lớp thể hiện một khuôn mặt với thế giới được mô hình hóa tốt nhất như một danh từ. Chỉ cần nhìn vào một số giao diện trong 'java.util':' Comparator', 'Enumeration',' List', 'Iterator',' Map', ... –
Ý kiến giống như mặt sau, mọi người đều có một và một số thì tốt hơn hơn những người khác.Tôi không tin rằng so sánh OOP với ngữ pháp là chính xác nhưng gần gũi của nó. – Lloyd