2013-07-24 42 views
8

Có các lớp thư viện B và C, cả hai đều kế thừa từ lớp A. Tôi có 2 lớp mở rộng B & C, cụ thể là MyB & MyC.Java Nhiều thừa kế, loại bỏ mã trùng lặp

A 
/\  
    B C 
/ \ 
MyB MyC 

MyB & MyC phần nhiều mã phổ biến và chúng chỉ hơi khác nhau.

Tôi muốn loại bỏ mã trùng lặp, làm cách nào tôi có thể làm điều này trong java? Trong C++ nó sẽ có thể bằng cách tạo ra một lớp cơ sở chung và đưa tất cả những gì là phổ biến trong nó như sau:

A 
/\ 
    B C 
    \/
    MyBase 
/\ 
MyB MyC 
+0

Kiểm tra điều này: http://stackoverflow.com/questions/17226364/java-alternative-to-multiple-inheritance – jsedano

Trả lời

24

Bạn có thể sử dụng composition:

  • tạo MyCommon lớp mới với mã chung
  • thêm phiên bản MyCommon vào MyB và MyC và ủy quyền công việc cho MyCommon.
+1

gah đánh bại tôi. :) –

+1

Đánh tôi đi. +1. – Renan

+4

Đánh bại mọi người ... ;-) – Thrakbad

1

Lớp học chỉ có thể mở rộng từ một lớp. Tuy nhiên, bạn có thể triển khai nhiều giao diện.

3

Thay vì có tất cả logic của bạn trong các lớp này, có tất cả logic chung trong lớp D. Bây giờ, hãy tạo nó để MyCMyB mỗi thành viên có một phiên bản là D. Đó được gọi là composition.

1

Trong Java bạn sẽ sử dụng một cái gì đó dọc theo dòng:

  1. Thành phần (mẫu) để đóng gói các trường hợp BC "trong" MyBase.

  2. Refactor BC (nếu cần) để lộ một giao diện riêng biệt, nói IBIC

  3. MyBase để thực hiện nhiều giao diện: IBIC, bởi "làm đúng" để lập bản đồ các phương pháp trên giao diện đối với các phiên bản nội bộ BC.

  4. MyBMyC để triển khai giao diện thích hợp và gọi bản đồ tới MyBase.

Các vấn đề liên quan