2013-06-30 3 views
0

안녕하세요 저는 Java 연습에서 Rectangle 및 Ellipse 클래스를 사용하고 있습니다. 사각형의 Square 자식입니까? 아니면 특수 생성자를 만들어야합니까?도형의 클래스 계층 구조

// constructor for Square 
public Rectangle(double side) { 
    this.width = side; 
    this.height = side; 
} 

타원 (원의) 원입니까?

이것은 Kojo 또는 Geogebra와 같은 간단한 응용 프로그램 일 수 있습니다.

public Square(double side) { 
    super(side, side); // reference to Rectangle constructor 
} 

마찬가지로 동일 Circle라고 할 수 있으며, 본질적 :

+0

하위 인터페이스 여야합니다. –

+0

운동의 과제는 무엇입니까? – Behe

+0

나에게 불분명한데, 원 클래스는 어디 있느냐 ?? – Sello

답변

2

은 예, 폭과 높이는 모두 동일되는 Rectangle의 하위 클래스로서 Square 생각 타당 메이저와 마이너 반경 모두가 동일한하는 타원 :이 모양을 표현하는 구상 서브 클래스를 만들지 여부를

public Circle(double radius) { 
    super(radius, radius); // reference to Ellipse constructor 
} 

당신에게 달려 있으며, 당신은 더 많은 의미가 있습니다 중해야 귀하의 프로그램의 맥락에서.

+1

고마워,이게 정말 도움이 됐어. – uetoyo

+0

@ user2490538 기꺼이 도와 드리겠습니다. – arshajii

1

질문은 다음과 같습니다. 설계 작업과 관련하여이 계층을 만들었습니까?

디자인을 수행하는 경우 Rectangle에서 확장되는 클래스를 만듭니다. 그렇지 않으면 실제 개선없이 코드가 복잡해집니다. 원/타원 문제에도 동일하게 적용 할 수 있습니다.

1

도 아니다! 둘 다 추상 모양의 하위 클래스 여야합니다. 이 기본 클래스에서 좌표 변환을 수행하여 하위 클래스가 원 중심 중심 원 또는 사각형을 간단히 구현할 수 있도록 할 수 있습니다. 그러나 당신은 그들 중 하나가 다른 하나의 하위 클래스가되기를 원하지 않습니다.

왜? 데이터가 아닌 행동/인터페이스를 설계해야하기 때문에! 데이터 설계는 거의 항상 내 경험에 뒤얽힌 디자인으로 이어집니다.

실제로 원/사각형 클래스를 제공해야하는 구체적인 이유가 없다면 (아래 설명 참조), 이미 타원이있는 경우 원에 대한 추가 클래스를 갖는 것이 좋지 않은 것처럼 보입니다. 중복 된 코드 만 있으면됩니다. 좀 더 제한된 경우를 만들기 위해 특수 생성자를 사용합니다.

+0

둘 다 추상적 인 Shape 클래스의 서브 클래스가 될 수 있으며 계층 적으로 연결될 수도 있습니다. 또한 중복 된 코드면에 대해서는 동의하지 않습니다. OP가하려고하는 것의 컨텍스트에 더 의존하지만, 사용하기 쉽고 이해하기 쉬운 공개 API와 같은 것을 만들 때, 별도의 'Circle'클래스를 가질 가능성이 있습니다 (' 'Ellipse'에서 모든 것이 처리 될 것이기 때문에, 중복 코드가 될 필요조차 없습니다). 광장도 마찬가지다. – arshajii

+0

즉, 전문 생성자는 무엇을 사용 하겠지만 여전히 생각합니다. 여기에 요점이 있습니다. 이것을 반영하기위한 답을 업데이트했습니다. – cmaster