Tại sao đa kế thừa được hỗ trợ trong Python mà không phải trong java?

Trong một bài báo trắng có tiêu đề “Java. một Tổng quan” của James Gosling vào tháng 2 năm 1995 đưa ra ý tưởng về lý do tại sao tính đa kế thừa không được hỗ trợ trong Java

JAVA bỏ qua nhiều tính năng hiếm khi được sử dụng, khó hiểu, khó hiểu của C++ mà theo kinh nghiệm của chúng tôi mang lại nhiều đau buồn hơn là lợi ích. Điều này chủ yếu bao gồm quá tải toán tử [mặc dù nó có quá tải phương thức], đa kế thừa và ép buộc tự động rộng rãi

Ai tốt hơn Tiến sĩ. James Gosling đủ điều kiện để đưa ra nhận xét về điều này. Đoạn này cung cấp cho chúng ta một cái nhìn tổng quan và anh ấy chạm vào chủ đề không hỗ trợ đa kế thừa này

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

Đầu tiên hãy đóng đinh điểm này. Bản thân điều này là một điểm thảo luận, liệu java có hỗ trợ đa kế thừa hay không. Một số người nói, nó hỗ trợ sử dụng giao diện. Không. Không hỗ trợ đa kế thừa trong java. Nếu bạn không tin lời tôi nói, hãy đọc lại đoạn trên và đó là lời của cha đẻ của Java

Câu chuyện hỗ trợ đa kế thừa bằng giao diện này là điều mà các nhà phát triển chúng tôi đã nghĩ ra. Giao diện mang lại sự linh hoạt hơn so với các lớp cụ thể và chúng tôi có tùy chọn triển khai nhiều giao diện bằng cách sử dụng một lớp. Đây là theo thỏa thuận, chúng tôi đang tuân theo hai kế hoạch chi tiết để tạo ra một lớp học

Điều này đang cố gắng tiến gần hơn đến đa kế thừa. Những gì chúng tôi làm là triển khai nhiều giao diện, ở đây chúng tôi không mở rộng [kế thừa] bất cứ thứ gì. Lớp triển khai là lớp sẽ thêm các thuộc tính và hành vi. Nó không nhận được việc triển khai miễn phí từ các lớp cha. Tôi chỉ đơn giản nói rằng, không có hỗ trợ đa kế thừa trong java

Đa kế thừa là nơi chúng ta kế thừa các thuộc tính và hành vi của nhiều lớp cho một lớp duy nhất. C++, Common Lisp, là một số ngôn ngữ phổ biến hỗ trợ đa kế thừa

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

Bây giờ chúng tôi chắc chắn rằng không có hỗ trợ đa kế thừa trong java. Nhưng tại sao? . Từ khóa là sự đơn giản và hiếm khi sử dụng

Sự đơn giản

Tôi muốn chia sẻ định nghĩa về java do James Gosling đưa ra

JAVA. Một ngôn ngữ đơn giản, hướng đối tượng, phân tán, giải thích, mạnh mẽ, an toàn, kiến ​​trúc trung lập, di động, hiệu suất cao, đa luồng, năng động

Nhìn vào vẻ đẹp của định nghĩa này cho java. Đây phải là định nghĩa cho một ngôn ngữ phần mềm hiện đại. Đặc điểm đầu tiên trong định nghĩa ngôn ngữ là gì?

Để thực thi tính đơn giản phải là lý do chính để bỏ qua nhiều kế thừa. Chẳng hạn, chúng ta có thể xem xét bài toán đa kế kim cương

Chúng ta có hai lớp B và C kế thừa từ A. Giả sử rằng B và C đang ghi đè một phương thức được kế thừa và chúng cung cấp cách triển khai của riêng chúng. Bây giờ D kế thừa từ cả B và C thực hiện đa kế thừa. D nên kế thừa phương thức ghi đè đó, phương thức ghi đè nào sẽ được sử dụng?

Trong C++ có khả năng rơi vào cái bẫy này mặc dù nó cung cấp các giải pháp thay thế để giải quyết vấn đề này. Trong java, điều này không bao giờ có thể xảy ra vì không có đa kế thừa. Ở đây, ngay cả khi hai giao diện sẽ có cùng một phương thức, thì lớp triển khai sẽ chỉ có một phương thức và điều đó cũng sẽ do người triển khai thực hiện. Tải động các lớp làm cho việc triển khai đa kế thừa trở nên khó khăn

hiếm khi được sử dụng

Chúng tôi đã sử dụng java từ lâu rồi. Đã bao nhiêu lần chúng ta phải đối mặt với tình huống bị mắc kẹt và quay mặt vào tường vì thiếu hỗ trợ đa kế thừa trong java? . Vì hiếm khi được yêu cầu, đa thừa kế có thể được bỏ qua một cách an toàn khi xem xét mức độ phức tạp của nó khi triển khai. Nó không đáng để rắc rối và con đường đơn giản được chọn

Ngay cả khi nó được yêu cầu, nó có thể được thay thế bằng thiết kế thay thế. Vì vậy, có thể sống mà không có nhiều quyền thừa kế mà không gặp vấn đề gì và đó cũng là một lý do

Ý kiến ​​​​của tôi về điều này là, việc bỏ qua hỗ trợ đa kế thừa trong java không phải là một sai sót và nó tốt cho những người triển khai

Đa kế thừa là một tính năng của khái niệm hướng đối tượng, trong đó một lớp có thể kế thừa các thuộc tính của nhiều hơn một lớp cha. Sự cố xảy ra khi tồn tại các phương thức có cùng chữ ký trong cả lớp cha và lớp con. Khi gọi phương thức, trình biên dịch không thể xác định phương thức lớp nào sẽ được gọi và ngay cả khi gọi phương thức lớp nào được ưu tiên.  

Ghi chú. Java không hỗ trợ Đa kế thừa

ví dụ 1

Java




Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
34

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
35

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
36

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
37
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
38

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
39

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
40

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
0
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
1

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2____03

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
6

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
8

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____100
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
01
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
02

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
06

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
07

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
0
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
09

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2____03

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
6

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
8

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____100
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
349
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
02

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
354

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
355

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
0
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
357____2358
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
359

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2____2361

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2____2363
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
364
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
366

 

_______07____2368

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2370____2371
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
372

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2374

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2376

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2378

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2380

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

đầu ra. Lỗi biên dịch được ném

Phần kết luận. Như được mô tả từ đoạn mã trên, khi gọi phương thức fun[] bằng cách sử dụng đối tượng Test sẽ gây ra sự phức tạp chẳng hạn như nên gọi phương thức fun[] của Parent1 hay fun[] của Parent2.  

ví dụ 2

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
6

Mã này như sau

Java




Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
34

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
35

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
386

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
36

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
37
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
38

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
39

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
391

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
0
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
393

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
6

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2398

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____100
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
401
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
02

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
06

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
40

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
0
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
409
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
358
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
393

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
6

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2398

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____100
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
01
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
02

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
354

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
07

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
0
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
17
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
358
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
393

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
6

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2398

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____100
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
349
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
02

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
32

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
33

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
0
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
357____2358
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
359

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2____2361

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2____2363
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
364
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
366

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____046

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2370____2371
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
372

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
52

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____054

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2380

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

đầu ra.  

Một lần nữa, nó đưa ra lỗi trình biên dịch khi chạy phương thức fun[] vì nhiều kế thừa gây ra sự cố kim cương khi được phép trong các ngôn ngữ khác như C++. Từ mã, chúng tôi thấy rằng. Khi gọi phương thức fun[] bằng cách sử dụng đối tượng Kiểm tra sẽ gây ra sự phức tạp chẳng hạn như nên gọi phương thức fun[] của Parent1 hay fun[] của Parent2. Do đó, để tránh những phức tạp như vậy, Java không hỗ trợ nhiều lớp kế thừa

Đa kế thừa không được hỗ trợ bởi Java khi sử dụng các lớp, việc xử lý sự phức tạp gây ra do đa kế thừa là rất phức tạp. Nó tạo ra các vấn đề trong các hoạt động khác nhau như truyền, xây dựng chuỗi, v.v. và lý do trên là có rất ít tình huống mà chúng ta thực sự cần nhiều kế thừa, vì vậy tốt hơn là bỏ qua nó để giữ cho mọi thứ đơn giản và dễ hiểu.
  
Các vấn đề trên được xử lý như thế nào đối với Phương thức và Giao diện Mặc định? . Và một lớp có thể triển khai hai hoặc nhiều giao diện. Trong trường hợp cả hai giao diện được triển khai đều chứa các phương thức mặc định có cùng chữ ký phương thức, thì lớp triển khai phải chỉ định rõ ràng phương thức mặc định nào sẽ được sử dụng trong một số phương thức ngoại trừ main[] của lớp triển khai sử dụng từ khóa super hoặc nó sẽ ghi đè lên phương thức mặc định .
Java 8 supports default methods where interfaces can provide a default implementation of methods. And a class can implement two or more interfaces. In case both the implemented interfaces contain default methods with the same method signature, the implementing class should explicitly specify which default method is to be used in some method excluding the main[] of implementing class using super keyword, or it should override the default method in the implementing class, or it should specify which default method is to be used in the default overridden method of the implementing class.

ví dụ 3

Java




Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
60

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
61

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
62

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
63
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
64

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
66

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
68
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
70

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
72

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
74

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
76

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
00
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
79
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
02

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
84

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
63
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
86

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
66

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
68
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
70

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
72

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
74

_______073____098

________ 073 ________ 100 ________ 1001 ________ 102

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
006

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
007

________ 00 ________ 1009 ________ 1010 ________ 1011

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____1013

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
014
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
015

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2363
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
70

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
72

 

_______073____1023

_______073____1025

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
027
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
028
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
029
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
030

 

_______073____1023

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
034

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
036
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
028
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
029
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
030

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
014
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
044

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
014
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
363
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
048

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
027
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
028
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
029
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
030

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
2

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
014
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
058

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
014
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
363
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
062

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
036
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
028
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
029
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
030

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

 

_______07____1071

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7____2363
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
364
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
5
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
076

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
72

 

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
080

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
73
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
082____2371
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
084

_______073____1086

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
087
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
00
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
089
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
02

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
087
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
092

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
087
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
094

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
7
Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2
04

Đầu ra

Default PI1
Default PI2
Now Executing showOfPI1[] showOfPI2[]
Default PI1
Default PI2

Ghi chú. Nếu chúng tôi loại bỏ việc triển khai phương thức mặc định khỏi “TestClass”, chúng tôi sẽ gặp lỗi trình biên dịch. Nếu có một viên kim cương thông qua các giao diện, thì sẽ không có vấn đề gì nếu không có giao diện ở giữa nào cung cấp triển khai giao diện gốc. Nếu họ cung cấp triển khai, thì có thể truy cập triển khai như trên bằng siêu từ khóa

Tại sao đa kế thừa được hỗ trợ trong Python?

Kế thừa là cơ chế để đạt được khả năng sử dụng lại mã vì một lớp [lớp con] có thể lấy thuộc tính của lớp khác [lớp cha] . Nó cũng cung cấp tính bắc cầu tức là. nếu lớp C kế thừa từ P thì tất cả các lớp con của C cũng kế thừa từ P.

Tại sao tránh đa kế thừa trong Java?

Trong trường hợp có nhiều giao diện có cùng một phương thức mặc định . Trong lớp cụ thể triển khai cả hai giao diện, bạn có thể triển khai phương thức chung và gọi cả hai siêu phương thức. do đó, bạn có thể đạt được nhiều kế thừa trong Java bằng các giao diện.

Tại sao đa kế thừa không được hỗ trợ trong Java nhưng trong giao diện?

Như chúng tôi đã giải thích trong chương thừa kế, tính đa thừa kế không được hỗ trợ trong trường hợp lớp do tính không rõ ràng . Tuy nhiên, nó được hỗ trợ trong trường hợp giao diện vì không có sự mơ hồ. Đó là bởi vì việc triển khai của nó được cung cấp bởi lớp triển khai.

Chủ Đề