2012-09-19 9 views
0

추상 슈퍼 클래스에 초기 필드 매개 변수 만 정의하는 생성자가 있고 하위 클래스 중 하나가 해당 초기화에 필드 매개 변수 중 하나를 사용하지 않으면 "null"을 넣을 수 있습니까? field 인수는 super() 호출에 들어 갑니까? 이 만족할슈퍼 매개 변수에 null 사용

public abstract class SuperClass { 
    protected int xPos; 
    protected int yPos; 
    protected int zPos; 

    public SuperClass(int xPos, int yPos, int zPos) { 
     this.xPos = xPos; 
     this.yPos = yPos; 
     this.zPos = zPos; 
    } 
    ... getters & setters, etc. 
} 

public class SubClass extends SuperClass { 
    public SubClass(int xPos, int yPos) { 
     super(xPos, yPos, null); 
    } 
} 

:

더 명확하게 설명하기 위해, 예를 들어 여기있어? 이 좋은 코딩 실천인가요? 아니면 여러 유형의 인수를 받아들이도록 여러 생성자를 갖는 것이 더 나은가?

+0

코딩 연습에 대해 이야기하기 전에 컴파일 오류가 발생합니다. 그냥 *** 현명한 *** 기본값으로 설정하십시오. – nhahtdh

+1

int를 'null'로 설정할 수 없습니다 ... –

+0

컴파일러가 적합하면 컴파일 할 수 없습니다. – elyashiv

답변

4

null을 int 유형으로 할당 할 수 없습니다.

여러 생성자를 사용하는 것이 좋습니다. 이 방법을 사용하면 클래스 내부의 '초기화되지 않은'매개 변수를 제어하여 유지 관리 및 가독성을 단순화합니다.

0

원시 유형 인 경우 ZERO으로 설정합니다. 설정할 수 없습니다 null

3

이 프리미티브 (int)이므로 null으로 설정할 수 없습니다.

또한 이런 식으로해야하는 것은 일반적으로 나쁜 디자인 인 "냄새"입니다. 하위 클래스가 수퍼 클래스의 기능 중 일부를 필요로하지 않으면 여기에서 계층 구조가 바뀔 가능성이 큽니다. 하위 클래스는 부모가되는 것 이상이어야합니다.

적어도 목록에있는 예에서는 하위 클래스가 실제로 수퍼 클래스 여야하고 그 반대의 경우도 있습니다.

+0

수퍼 클래스의 생성자를 정의하지 않고 super()를 호출하지 않고 서브 클래스의 생성자를 정의하면 더 좋을까요? 이 좋은 디자인인가요? – gratsby

+0

두 클래스가 뒤집혀있는 것처럼 보입니다. 수퍼 클래스는 서브 클래스 여야하며 그 반대도 마찬가지입니다. 그러나 일반적으로 상속을 필요로하지 않으면 많은 상처를 겪을 수 있습니다. 어쩌면 두 개의 연결되지 않은 클래스가 필요한지 여부를 묻는 것이 좋습니다. – Calum

관련 문제