2014-09-16 2 views
0

Java에서 다중 분류를 구현하는 방법이 있습니까? 예를 들어,이 UML 다이어그램을 살펴보십시오. enter image description hereJava에서 다중 분류 구현

GrainCrop 클래스는 어떻게 구현되어야합니까?

+1

봐 : http://stackoverflow.com/questions/21824402/java-multiple-inheritance – conFusl

+0

예 실제로 이전에 질문이되었습니다. 그것을 지적 주셔서 감사합니다. – nsane

답변

2

Java는 클래스에서 다중 상속을 지원하지 않으므로 인터페이스 만 여러 인터페이스를 상속 할 수 있습니다. 그래서 내가 뭘 할 것인가는 해당 클래스 GrainCrop이 다른 두 클래스의 인터페이스를 구현한다는 것입니다. 그런 다음 GrainCrop은 두 개의 다른 클래스를 집계하고 "내부"객체에 위임합니다. 추가 물건을해야 할 경우 GrainCrop에있는 전화를 장식 할 수도 있습니다. 예 :

public void methodFromClassCrop() { 
    System.out.println("Stuff before call"); 
    oneOfTheObjects.methodFromClassCrop(); 
    System.out.println("Stuff after call"); 
} 

물론 클래스 중 하나에 대해서만 인터페이스를 소개하고 다른 인터페이스를 상속 할 수 있습니다. 새로운 클래스가 다른 클래스의 하나를 확장하여 새로운 행동, 알고리즘, 다른 데이터를 사용하는 데이터를 소개하는지, 아니면 단지 "행동하다"(이 경우 집계)면 문제에 달려 있습니다.

2

인터페이스. CropFoodItem 중 하나 또는 모두는 GrainCrop에 의해 구현되는 인터페이스입니다. 그래서 다음 중 하나를

  1. GrainCropCrop을 (그리고 그 행동 상속) 및 전시 행동 FoodItem을. 이 경우 Crop은 기본 클래스 (추상화 될 수 있음)이고 FoodItem은 인터페이스입니다.
  2. GrainCropFoodItem이다 (그 행동 상속) 및 나타낸다 동작의 Crop한다. 이 경우 FoodItem은 기본 클래스 (추상화 될 수 있음)이고 Crop은 인터페이스입니다.
  3. GrainCrop은 모두 FoodItemCrop의 동작을 나타냅니다. 이 경우 FoodItemCrop 모두 인터페이스입니다.

단일 상속 환경에서 "무엇"인지와 어떤 동작을 나타내는 지 식별하는 데 특히주의해야합니다. (이는 FoodItem과 같은 구조가 아닌 Eatable과 같은 인터페이스로 종종 인터페이스를 설명하는 이유 중 하나이기 때문에 모델링이 더 명확 해집니다.)

자주 지나치게 단순화 된 것처럼 생각하면 기본 클래스의 "무언가"와 인터페이스는 "무언가"와 같은 것입니다. 객체는 일 수 있으며 일 수 있지만 할 수 있습니다 많은 것들.

0

글쎄, FeedItem에 구현이없는 것 같아서, 인터페이스로 만들고, (아마도 추상적 인) 자르기 클래스를 만들고, 둘 다 GrainCrop을 확장 해 보겠습니다. 하나의 클래스 만 확장 할 수 있지만 원하는만큼 인터페이스를 확장 할 수 있습니다. 이 예에서