ვიდეო: რატომ არის მრავალჯერადი მემკვიდრეობა მხარდაჭერილი C++-ში, მაგრამ არა ჯავაში?
2024 ავტორი: Lynn Donovan | [email protected]. ბოლოს შეცვლილი: 2023-12-15 23:49
C++ , Common lisp და რამდენიმე სხვა ენა მხარს უჭერს მრავალ მემკვიდრეობას ხოლო ჯავა არა მხარდაჭერა ის. ჯავა არ იძლევა მრავალჯერადი მემკვიდრეობა რათა თავიდან ავიცილოთ მისგან გამოწვეული გაურკვევლობა. ასეთი პრობლემის ერთ-ერთი მაგალითია ალმასის პრობლემა, რომელიც გვხვდება მრავალჯერადი მემკვიდრეობა.
შესაბამისად, რატომ არ არის მხარდაჭერილი მრავალჯერადი მემკვიდრეობა ჯავაში?
ჯავა მხარს უჭერს მრავალჯერადი მემკვიდრეობა მხოლოდ ინტერფეისების საშუალებით. კლასს შეუძლია ნებისმიერი რაოდენობის ინტერფეისის დანერგვა, მაგრამ შეუძლია მხოლოდ ერთი კლასის გაფართოება. მრავალჯერადი მემკვიდრეობა არის არა მხარდაჭერილია, რადგან ეს იწვევს ალმასის სასიკვდილო პრობლემას. შენ არ მიიღოთ რაიმე ფუნქცია ინტერფეისიდან.
ასევე, რა არის Diamond პრობლემა მრავალჯერადი მემკვიდრეობით? ალმასის პრობლემა ” არის გაურკვევლობა, რომელიც შეიძლება წარმოიშვას დაშვების შედეგად მრავალჯერადი მემკვიდრეობა . ეს არის სერიოზული პრობლემა ენებისთვის (როგორიცაა C++), რომლებიც საშუალებას იძლევა მრავალჯერადი მემკვიდრეობა სახელმწიფოს. ჯავაში კი, მრავალჯერადი მემკვიდრეობა დაუშვებელია კლასებისთვის, მხოლოდ ინტერფეისებისთვის და ისინი არ შეიცავს მდგომარეობას.
ანალოგიურად, ადამიანები კითხულობენ, რატომ აქვს C++ მრავალჯერადი მემკვიდრეობის მხარდაჭერა, მაგრამ C# არა?
მრავალჯერადი მემკვიდრეობა in C# C#-ს არ აქვს მრავალჯერადი მემკვიდრეობის მხარდაჭერა , რადგან ისინი მსჯელობდნენ, რომ დამატება მრავალჯერადი მემკვიდრეობა დაამატა ზედმეტი სირთულე C# ხოლო ძალიან მცირე სარგებელს იძლევა. In C# , კლასები დაშვებულია მხოლოდ მემკვიდრეობით ერთი მშობლის კლასიდან, რომელსაც მარტოხელა ეწოდება მემკვიდრეობა.
როგორ უჭერს მხარს C++ მრავალჯერად მემკვიდრეობას?
ბევრი სხვა ობიექტზე ორიენტირებული პროგრამირების ენებისგან განსხვავებით, C++ საშუალებას იძლევა მრავალჯერადი მემკვიდრეობა . მრავალჯერადი მემკვიდრეობა საშუალებას აძლევს ბავშვის კლასს მემკვიდრეობით ერთზე მეტი მშობლის კლასიდან. ცხოველებისა და ქვეწარმავლების კლასები მემკვიდრეობით იქიდან. მხოლოდ Animal კლასი არღვევს მეთოდს breathe().