Tại sao Java không hỗ trợ đa kế thừa?

Written by IT Phú Trần on 16/02/2017 in Câu hỏi phỏng vấn and LẬP TRÌNH JAVA with 22 comments.

Tại sao Java không hỗ trợ đa kế thừa? Đây là một trong những câu hỏi phỏng vấn khá khó khăn trong java.Nếu C++  có thể hỗ trợ đa kế thừa nhưng với Java tại sao không,đây là một câu hỏi tranh luận được đưa ra.

Java không hỗ trợ đa kế thừa

Gần đây một người bạn của tôi xuất hiện trong một cuộc phỏng vấn và sau một loạt các câu hỏi dễ dàng thì câu
cuối cùng được hỏi : “Tại sao Java không hỗ trợ đa kế thừa” , mặc dù người bạn của tôi đã có một ý tưởng rằng trong Java có thể hỗ trợ đa kế thừa bằng cách sử dụng  interface nhưng người phỏng vấn đã không đồng ý với ý kiến này, có lẽ anh bạn của tôi đã chưa đọc kỹ về kiến thức này. Vì vậy, sau khi phỏng vấn người bạn của tôi đến với tôi,tôi và anh ta vừa uống coffee vừa nói chuyện bình thường, anh ta nói với tôi về câu hỏi này và hỏi tôi câu trả lời. Vâng đây là câu hỏi rất cổ điển, và tôi quết định viết một bài blog để người bạn của tôi cũng như các bạn đọc có thể trả lời câu hỏi này.

Đầu tiên,để chắc chắn rằng java không hỗ trợ đa kế thừa thì đây là tuyên bố của James Gosling trong tháng 2 năm 1995 cho một ý tưởng về lý do tại sao đa kế thừa không được hỗ trợ trong Java:

 

 

“JAVA omits many rarely used, poorly understood, confusing features of C++ that in our experience bring more grief than benefit. This primarily consists of operator overloading (although it does have method overloading), multiple inheritance, and extensive automatic coercions.”

 

Tại sao Java không hỗ trợ đa kế thừa?

Sự mơ hồ hay còn gọi là “ambiguity around Diamond problem” ,các bạn hãy xem xét một class A có phương thức foo ()  và sau đó class B và C  kế thừa từ class A và có có phương thức foo () riêng của mỗi class.Vấn đề bây giờ là class class D kế thừa từ cả 2 class B và C vậy class D sẽ sử dụng phương thức foo() của class B hay C? Điều này được gọi là mơ hồ,hãy xem ví dụ mô hình dưới đây :

Mô hình giải thích tại sao Java không hỗ trợ đa kế thừa

 

Quả nhiên là class D không biết gọi phương thức foo() từ class B hay C.

Đến đây thì bạn đọc có thể hiểu được răng JAVA loại bỏ đa kế thừa rồi đúng không?

Kết Luận :

Trong C ++ chúng ta có thể giải quyết điều này bằng đa kế thừa, cung cấp dự khuyết để giải quyết. Trong JAVA thì  không bao giờ có thể xảy ra vì java không hỗ trợ đa kế thừa. Ở đây ngay cả  khi hai interface có cùng một phương thức, các class thực hiện  sẽ chỉ có một phương thức và sẽ được thực hiện bởi người lập trình.

Đây là lý do đa kế thừa nảy sinh nhiều vấn đề  mơ hồ hơn cả những vấn đề nó giải quyết được. Do đó mà Java cũng như các ngôn ngữ hiện đại ngày nay đều không có đa kế thừa như C++ hay Pascal.

22 Responses to “Tại sao Java không hỗ trợ đa kế thừa?

  1. Today, I went to the beach with my kids. I found a sea
    shell and gave it to my 4 year old daughter and said “You can hear the ocean if you put this to your ear.” She placed the shell to her ear and screamed.
    There was a hermit crab inside and it pinched her ear.
    She never wants to go back! LoL I know this is totally
    off topic but I had to tell someone!

  2. The other day, while I was at work, my cousin stole my iphone
    and tested to see if it can survive a forty foot drop, just
    so she can be a youtube sensation. My apple ipad is
    now destroyed and she has 83 views. I know this is
    totally off topic but I had to share it with
    someone!

  3. Today, I went to the beach with my children. I found a sea
    shell and gave it to my 4 year old daughter and said “You can hear the ocean if you put this to your ear.” She put the shell to
    her ear and screamed. There was a hermit crab inside and it pinched her ear.
    She never wants to go back! LoL I know this is entirely off topic
    but I had to tell someone!

  4. Pretty element of content. I simply stumbled upon your site and in accession capital to assert that I get actually loved account
    your blog posts. Anyway I’ll be subscribing on your feeds and even I fulfillment you access persistently rapidly.

  5. With havin so much content do you ever run into
    any issues of plagorism or copyright infringement?
    My website has a lot of completely unique content I’ve either created myself or outsourced but it looks like
    a lot of it is popping it up all over the web without my agreement.
    Do you know any techniques to help protect against content
    from being ripped off? I’d genuinely appreciate
    it.

  6. Have you ever considered publishing an ebook or guest authoring on other sites?
    I have a blog based on the same information you discuss and would love to have you share some
    stories/information. I know my viewers would appreciate your work.

    If you’re even remotely interested, feel free to shoot me an email.

  7. Hi there! Quick question that’s totally off topic. Do you
    know how to make your site mobile friendly? My weblog looks weird when browsing from my iphone4.
    I’m trying to find a theme or plugin that might be able to fix this problem.
    If you have any suggestions, please share. With thanks!

  8. Admiring the hard work you put into your blog and in depth information you provide.
    It’s good to come across a blog every once in a while that isn’t the same unwanted rehashed material.
    Wonderful read! I’ve bookmarked your site and I’m including your RSS feeds to my Google
    account.

  9. I just want to say I’m very new to blogs and truly loved this blog. Probably I’m planning to bookmark your site . You certainly come with outstanding writings. Bless you for sharing your webpage.

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 *