2012-01-19 33 views
7

Có phải như sau không? (xin lưu ý rằng tôi không viết nội dung của các lớp học và tôi cũng không viết các giao diện ;-))Siêu lớp và phân lớp mỗi lớp với giao diện riêng của nó

abstract class SuperClass implements SuperInterface 

class SubClass extends SuperClass implements SubInterface 

Hoặc đây có phải là hành vi không tốt?

gì khiến tôi băn khoăn là, rằng những điều sau đây không làm việc:

List<SubInterface> myList; 
... 
for(SuperInterface si : myList) { 
    ... 
} 
+0

Mã này không thể đúng, vui lòng kiểm tra lại. – SHiRKiT

+0

Bạn có lý do để nghi ngờ rằng đây là thực hành không tốt? Bạn có thể giải thích những lý do đó không? – Jesper

+3

Tại sao không thể đúng? trông ổn với tôi –

Trả lời

10

Đó là không tốt cũng không xấu. SubClass ở đây triển khai cả hai SuperInterfaceSubInterface (cũng như giao diện được xác định bởi phương pháp công khai SuperClass). Nếu đó là những gì bạn cần - đó là tốt.

Như ví dụ thứ hai của bạn

List<SubInterface> myList; 
... 
for(SuperInterface si : myList) { 
    ... 
} 

Bạn tuyên bố danh sách các SubInterface yếu tố, nhưng muốn lấy SuperInterface yếu tố từ nó. Nếu SubInterface mở rộng SuperInterface thì điều này có ý nghĩa nào đó. Nếu không thì không.

+0

Phải, cảm ơn bạn rất nhiều vì lời giải thích của bạn! –

1

này là tốt tùy thuộc vào những gì bạn muốn đạt được (có thể có một thiết kế tốt hơn cho những gì bạn đang cố gắng để làm) , hãy nhớ rằng SubClass là cả SuperInterface và SubInterface

3

Điều này là chính xác. Tại sao không ?

SuperClass của bạn triển khai SuperInterface cũng được triển khai bởi SubClass của bạn (nhờ vào SubClass mở rộng SuperClass).

Ngoài ra, SubClass của bạn triển khai một giao diện khác (SubInterface).

Không có gì sai trong mã/kiến ​​trúc của bạn.

SuperClass -- implements --> SuperInterface 
SubClass -- extends --> SuperClass -- implements --> SuperInterface*, SubInterface 
  • cụ Implicit do sự mở rộng của SuperClass
Các vấn đề liên quan