Vì sao lỗi không hỗ trợ ứng dụng java năm 2024
Có rất nhiều ngôn ngữ lập trình hướng đối tượng phổ biến được sử dụng hiện nay, bao gồm Java, C++, JavaScript, Python, PHP, Ruby và Perl. Mặc dù kế thừa là một khái niệm phổ biến trong số các ngôn ngữ OOP này, nhưng không phải tất cả các kiểu kế thừa đều tồn tại trong mỗi ngôn ngữ này. Điều cực kỳ quan trọng là phải biết các kiểu kế thừa phổ biến và các hạn chế về kế thừa trong ngôn ngữ cụ thể mà bạn đang sử dụng. Bạn càng biết nhiều về kế thừa, bạn sẽ càng trở thành nhà phát triển hiệu quả hơn. Các kiểu kế thừa được Java hỗ trợ bao gồm:
Ngoài các kiểu kế thừa được liệt kê ở trên, còn có các kiểu khác mà Java không hỗ trợ.
Tại sao Java không hỗ trợ đa kế thừaVấn đề chính với đa kế thừa là nó có thể tạo ra sự mơ hồ trong các lớp con. Trong sách trắng năm 1995, nhà thiết kế Java chính James Gosling đã tuyên bố rằng các vấn đề về đa kế thừa là một trong những lý do khiến Java được tạo ra. Sự phức tạp vốn có của đa kế thừa được thấy rõ nhất trong bài toán kim cương. Trong bài toán kim cương, lớp cha A có hai lớp con B và C riêng biệt; nghĩa là, các lớp con B và C mở rộng lớp A. Bây giờ chúng ta tạo một lớp con D mới mở rộng cả lớp B và lớp C. Lưu ý rằng chúng ta có nhiều kế thừa (D mở rộng B và C), kế thừa phân cấp ( B và C mở rộng A) và kế thừa đa cấp (D mở rộng A, B và C). Trong bài toán kim cương, lớp con B và C kế thừa một phương thức từ lớp cha A. Cả B và C đều ghi đè phương thức được kế thừa. Nhưng các phương pháp mới ở B và C mâu thuẫn với nhau. Lớp con cuối cùng D kế thừa hai phương thức độc lập và xung đột từ nhiều cha mẹ B và C của nó. Không rõ nên sử dụng phương thức nào của lớp D, do đó nảy sinh sự mơ hồ. Các ngôn ngữ lập trình OOP khác triển khai các phương pháp khác nhau để giải quyết sự mơ hồ của đa kế thừa.Cách giải quyết vấn đề đa kế thừa trong JavaViệc đa kế thừa có vấn đề không có nghĩa là nó vô dụng. Có nhiều tình huống mà bạn có thể muốn một lớp có chức năng từ một số lớp khác. Hãy nghĩ về chiếc Tesla Roadster mà bạn sẽ mua khi trở thành một nhà phát triển phần mềm cực kỳ thành công. Đặc tính kỹ thuật của nó dựa trên cả hạng xe thể thao và hạng xe điện. Một ví dụ khác: trình duyệt mà bạn đang đọc bài viết này. Nó có các tính năng từ lớp giải pháp bảo mật Internet và từ lớp trình duyệt Internet nói chung. Nhưng bạn không thể mở rộng nhiều lớp trong Java. Vậy ngôn ngữ này giải quyết vấn đề đa kế thừa như thế nào? Java sử dụng các cấu trúc được gọi là giao diện. Giao diện là các kiểu trừu tượng xác định hành vi sẽ được các lớp thực hiện. Bởi vì chúng trừu tượng nên các giao diện không chứa các hướng dẫn chi tiết về hành vi của chúng. Thay vào đó, các lớp cung cấp các triển khai cụ thể về hành vi giao diện. Giao diện có một số đặc điểm xác định:
Bây giờ chúng ta có thể giải quyết vấn đề kim cương một cách hiệu quả bằng cách sử dụng các giao diện. Hãy nhớ rằng chỉ các giao diện mới có thể mở rộng các giao diện khác và bất kỳ lớp nào yêu cầu nhiều đặc điểm kế thừa đều phải triển khai nhiều giao diện, chúng ta có thể ghi đè các lớp có vấn đề kim cương. Những gì từng là lớp A, B và C giờ trở thành giao diện A, B và C. Giao diện B và C vẫn mở rộng giao diện A, nhưng không có giao diện nào trong số này có chức năng cụ thể, chỉ có các hành vi cụ thể. Lớp D vẫn là lớp chịu trách nhiệm triển khai cụ thể hành vi được tìm thấy trong giao diện B và C. Lưu ý một điểm khác biệt chính: lớp D không mở rộng giao diện B và C. Thay vào đó, nó triển khai chúng. Bằng cách này, bạn thực sự không có nhiều kế thừa. Thay vào đó, bạn chỉ cần trình bày lại vấn đề. Phần kết luậnHiểu tính kế thừa là điều cần thiết đối với bất kỳ nhà phát triển Java hiệu quả nào. Điều quan trọng không kém là phải biết những hạn chế của tính kế thừa và cách giải quyết có sẵn của Java đối với các vấn đề đa kế thừa truyền thống. Học cách tạo giao diện để tái tạo hiệu ứng của đa kế thừa trong Java sẽ cải thiện năng suất và cơ hội tuyển dụng của bạn. |