2011-11-28 4 views
1

Java에서 다중 상속을 모방해야합니다. 잘못된 디자인 일 수도 있지만 내 문제는 (부모) 클래스 기능과 관련이 없기 때문에 인터페이스로 기능을 모방하지 못했습니다. 문제에 대한 자세한 설명은 다음과 같습니다. 메소드 수가 많은 AbstractModel.java 클래스가 있습니다. 반면에 다른 클래스는 AbstractTableModel.java입니다. 이제 AbstractModel.java을 처리하는 table controller.java라는 클래스가 있고 다른 한편으로 AbstractTableModel.java을 처리하는 Tableview .java라는 클래스가 있다고 가정합니다. 나는 정의 할 수있는 방법이 필요하다 : public class A는 AbstractModel, AbstracTableModel을 확장하여 뷰와 컨트롤러는 같은 클래스를 확장과 함께 사용할 수있다. AbstractTableModel.java 확장 된 솔루션은 AbstractModel이므로 내장 된 Java 클래스이므로 솔루션이 아닙니다.인터페이스를 사용하여 Java에서 다중 상속을 구현하는 방법은 무엇입니까?

감사합니다.

+1

AbstractModel 및 AstractTableModel 인터페이스를 만들 수 없으며 클래스 A에서 이러한 인터페이스를 구현할 수 없습니까? – Asterisk

+0

['SharedModel']의 예제 (http://stackoverflow.com/a/7572903/230513)도 참조하십시오. – trashgod

+0

AbstractModel 클래스 또는 AstractTableModel 클래스를 인터페이스로 변환 한 다음 클래스 A는 1 클래스를 확장하고 나머지 인터페이스를 구현합니다. – Thinhbk

답변

1

Java에서는 직접 할 수 없지만 delegation design pattern을 사용할 수 있습니다. Look here. 그것은 매우 비슷한 질문입니다.

+0

행크스 @gigadot 나는 내 질문에 충분히 명확하지 않은 것 같아요.앞에서 설명한 것처럼 문제는 기능적이지 않습니다. Summarize : AbstracttableModel을 사용하는 뷰가 있습니다. 즉 디스플레이 (AbstractTableModel 모델)이고, 컨트롤러에 추상 모델, 즉 addModel (AbstractModel 모델)을 받아들이는 메소드가있다. 이제 컨트롤러에 동일한 모델을 추가하고 다중 상속없이 뷰를 표시하는 방법은 무엇입니까? 그 중 한 가지 방법은 AbstractModel AM, AbstracTableModel ATM 및 컨트롤러에 대한 AM과 – Hasti

+0

보기의 ATM을 포함하는 두 번째 클래스를 만드는 것이 었습니다. AbstractModel과 AbstracTableModel의 하위 클래스 인 새 클래스를 만들 수는 없습니다 . 컨트롤러를 변경하고이 새로운 클래스를 수락하도록 설명한 것처럼 메서드의 서명을 보려면 모델 표현을보다 잘 디자인해야합니다. – gigadot

+0

기능에 대한 위임 디자인 패턴 이외에이 문제를 다루는 특정 디자인 패턴을 알고 있습니까? – Hasti

0

AbstractTableModel을 대신 사용하는 코드를 변경하여 TableModel (이 인터페이스는 AbstractTableModel으로 구현 됨)을 허용합니다. 어쨌든이 작업을 수행해야합니다. 인터페이스에 의존 할 수있는 경우 구체적인 구현에 의존하지 마십시오.

그러면 쉽게 AbstractModel 클래스를 TableModel으로 구현할 수 있습니다.

AbstractModel에 대한 인터페이스를 만드는 것도 고려해야합니다. 일반적으로 인터페이스 X, 추상 구현베이스 AbstractX을 작성해, 모든 구현으로 공유되는 공통의 기능을 제공합니다. 구현은 MyX, YourX 등입니다. 구체적인 구현 (다만 반드시 그러한 것은 전부는 아닙니다)은 AbstractX을 알고 있습니다 만, 이 계층 구조 외부의 코드. 예를 List, AbstractList, ArrayListLinkedList에 대한 있습니다 만, 실제로 AbstractList에 따라 어떤 코드가 없습니다 :

자바 컬렉션 프레임 워크가 그 좋은 예입니다. 대부분의 사용자는 List을 사용하거나, 어떤 이유로 든 구체적인 구현이 필요한 경우에는 그 목록에 의존합니다.

+0

'List'와'AbstractList'는 여기서 좋은 비교라고 생각하지 않습니다. 'AbstractTableModel'은'TableModel'의 공개 메소드의 절반을 상속받지 않는 반면, 후자는 인터페이스에서 상속받은 메소드 이외의 public 메소드를 가지고 있지 않습니다. 또한,'AbstractTableModel'을 확장하는 수십 개의 클래스를 보았습니다. (타사 라이브러리에서)'TableModel'을 직접 구현 한 클래스는 두 개 뿐이므로 인터페이스보다는이 구현에 따라 실제로 많은 코드가 있습니다. –

관련 문제