Nếu lớp tôi implements
có giao diện thì tôi có thể nói rằng tôi đang theo thừa kế không? Tôi biết rằng khi một lớp extends
khác lớp thì đó là sự kế thừa.
Nếu lớp tôi implements
có giao diện thì tôi có thể nói rằng tôi đang theo thừa kế không? Tôi biết rằng khi một lớp extends
khác lớp thì đó là sự kế thừa.
Câu trả lời:
CẬP NHẬT: Tôi đã sửa đổi câu trả lời này. Một số điểm tốt đã được nêu ra trong các ý kiến xứng đáng được gọi ra.
Nếu lớp của tôi thực hiện một giao diện thì tôi có thể nói rằng tôi đang theo kế thừa không?
Nó không hoàn toàn rõ ràng những gì bạn có nghĩa là "theo thừa kế". Hãy hỏi một câu hỏi hơi khác nhau?
Thừa kế là gì?
Đây là những khác biệt tinh tế. Điều đó thật đáng tiếc vì nó khó hiểu.
Những nhầm lẫn thường phát sinh từ sự phân biệt tinh tế này?
Nhầm lẫn có thể phát sinh vì mọi người nghĩ về thừa kế như một cơ chế để chia sẻ chi tiết thực hiện. Mặc dù nó là một cơ chế như vậy, cơ chế đó hoạt động bằng cách chia sẻ các thành viên . Những thành viên không cần phải thực hiện! Như chúng ta sẽ thấy, chúng có thể trừu tượng.
Cá nhân tôi sẽ hạnh phúc hơn nếu các đặc tả Java và C # sử dụng một từ khác ngoài "kế thừa" để mô tả mối quan hệ giữa các phương thức và các lớp giao diện, để tránh sự nhầm lẫn này. Nhưng họ không, và chúng tôi phải suy luận từ các thông số kỹ thuật, không chống lại họ.
Trong Java, các thành viên giao diện được kế thừa bởi các lớp thực hiện chúng?
Vâng, một số là. Xem phần đặc tả Java 8.4.8, mà tôi trích dẫn ở đây để thuận tiện cho bạn.
Một lớp C kế thừa từ siêu lớp trực tiếp của nó và siêu giao diện trực tiếp tất cả các phương thức trừu tượng và mặc định m mà tất cả những điều sau đây là đúng: [...]
Nếu bạn nói rằng một lớp thực hiện một giao diện thì lớp đó kế thừa các phương thức trừu tượng và mặc định của giao diện đó . (Tất nhiên tôi đã bỏ qua các điều kiện tuân theo; xem thông số kỹ thuật để biết chi tiết. Đặc biệt, một lớp thực hiện một thành viên của giao diện không được coi là đã kế thừa thành viên đó. Một lần nữa, điều này có khó hiểu không?
Chúng ta thường nói trong Java rằng một lớp kế thừa từ một giao diện?
Thông thường chúng ta sẽ nói rằng một lớp thực hiện một giao diện. Như đã lưu ý ở trên, một lớp có thể kế thừa các thành viên từ một giao diện, nhưng vẫn không được cho là kế thừa từ giao diện. Đó là khó hiểu, có.
Sự phân biệt tinh tế này có quan trọng trong công việc hàng ngày không?
Điển hình là không. Kiểu phân tích cú pháp hẹp của đặc tả này hữu ích hơn cho các trình soạn thảo trình biên dịch so với dòng của các nhà phát triển kinh doanh. Điều quan trọng hơn để hiểu khi nào nên sử dụng một giao diện hơn là để có được một định nghĩa chính xác về "kế thừa từ".
java
vì vậy đây là câu trả lời đúng, trừ khi OP có nghĩa là một số khác java
:-)
Kế thừa có nghĩa là viết một lớp con mới cho siêu lớp. Viết một lớp mới đối với một giao diện đang thực hiện giao diện đó. (Và viết một giao diện mới dựa trên giao diện cũ sẽ mở rộng giao diện đó.)
Thuật ngữ đúng duy nhất áp dụng cho cả ba khả năng là phân nhóm . Không phải mọi kiểu con là một lớp con.
Với các lớp con , bạn
Với các giao diện , bạn hoàn thành một hợp đồng bằng cách thực hiện các phương thức khai báo.
Đó là cách cổ điển để xem xét nó. Bây giờ với Java 8, các giao diện trở thành một hỗn hợp:
Việc triển khai một giao diện mà tất cả các phương thức của nó có các cài đặt mặc định vẫn được tính là 'hiện thực', hay đúng hơn là phần mở rộng? Tôi không thể nói. Vì trường hợp này khá xa vời (điều này thực sự cho phép đa kế thừa không trạng thái), tôi vẫn chỉ sử dụng 'thừa kế' với các lớp con.