상속 구현에 대한 나의 현재 이해는 IS-A 관계가 존재 하는 경우에만 클래스를 확장해야한다는 것 입니다. 부모 클래스가 다른 기능을 가진 더 구체적인 자식 유형을 가질 수 있지만 부모에서 추상화 된 공통 요소를 공유합니다.
Java 교수가 우리에게 권장하는 것이 있기 때문에 이해하는 것에 의문을 제기하고 있습니다. 그는 JSwing
우리가 수업 시간에 구축 하는 응용 프로그램에 대해 권장했습니다
하나는 모든 확장해야 JSwing
클래스 ( JFrame
, JButton
, JTextBox
별도의 사용자 정의 클래스로 등) 및 (구성 요소 크기, 구성 요소 라벨 등 같은) 그들에 GUI 관련 사용자 정의를 지정
지금까지는 좋았지 만, 유일한 구별 요소는 레이블이지만 모든 JButton에는 자체 사용자 정의 확장 클래스가 있어야한다고 조언합니다.
예를 들어, GUI에 Okay 및 Cancel 버튼이 두 개있는 경우 . 그는 다음과 같이 확장해야한다고 권장합니다.
class OkayButton extends JButton{
MainUI mui;
public OkayButton(MainUI mui) {
setSize(80,60);
setText("Okay");
this.mui = mui;
mui.add(this);
}
}
class CancelButton extends JButton{
MainUI mui;
public CancelButton(MainUI mui) {
setSize(80,60);
setText("Cancel");
this.mui = mui;
mui.add(this);
}
}
보시다시피 유일한 차이점은 setText
기능에 있습니다.
이 표준 관행입니까?
Btw, 이것이 논의 된 과정 을 Java의 Best Programming Practices 라고합니다.
[교수의 답변]
그래서 교수와 문제를 논의하고 답변에 언급 된 모든 요점을 제기했습니다.
그의 서브 정당화는 GUI 설계 표준을 준수하면서 재사용 가능한 코드를 제공한다는 것입니다. 예를 들어 개발자가 한 창에서 사용자 정의 Okay
및 Cancel
단추를 사용한 경우 다른 창에서도 동일한 단추를 배치하는 것이 더 쉬울 것입니다.
내가 생각하는 이유가 있지만 여전히 상속을 악용 하고 코드를 취약하게 만듭니다.
나중에, 모든 개발자가 실수로 부를 수있는 setText
온 Okay
버튼을 변경합니다. 이 경우 하위 클래스는 성가신 것입니다.
JButton
를 작성JButton
하고 호출 할 수 있는데 왜 생성자에서 공개 메소드를 확장 하고 호출 합니까?