2014-11-11 1 views
1

GOval이라는 이름의 하위 클래스를 만들었습니다. 나는 검은 공을 만들고 싶다. 이것을 작동 시키려면 다음을 시도해보십시오.생성자 생성시 객체에 대한 메소드를 호출 할 수 있습니까?

클래스 내에서 새 Ball 객체를 만듭니다.

Ball ball = new Ball(0,0,200); 

이것은 (GOval를 확장) 볼이 생성자 나는 또한 같은이 생성자 내에서 작성 색을 설정뿐만 아니라 색상을 초기화 할

public Ball(double xPos, double yPos, double diameter){ 
    super(xPos, yPos, diameter, diameter); 
} 

를 호출합니다. 문제는 이것들이 당신이 객체에서 호출하는 메소드라는 것입니다. 예를 들어이 작동합니다

Ball ball = new Ball(0,0,200); 
ball.setFillColor(Color.BLACK) 
add(playball); 

하지만 내가 정말 원하는 것은이 같은 공 클래스의 건설이 마지막이 개 지침을 할 수 있습니다 :

public Ball(double xPos, double yPos, double diameter){ 
     super(xPos, yPos, diameter, diameter); 
     setFillColor(Color.BLACK); 
    } 

귀하의 답변 주셔서 감사합니다 : 알았어 작업 : setFilled (I 슈퍼와 GOval의 생성자를 호출하기 때문에 아마 작동

setFilled(true); 
setColor(Color.BLACK); 

하고 나는이 메소드를 호출하고 setColor)? fillColor 이후

+2

물론 가능합니다. 그것은 단지 방법 일뿐입니다. * subclass * 메소드를 호출하는 것에 조심하십시오. 어쨌든 간단히 시도하면 거의 확실합니다. –

+1

이것은 생성자 (및 초기화 블록)의 정확한 의도입니다. –

답변

1

이 볼 클래스의 속성입니다, 당신은 왜 방법을 생성자 내부

public Ball(double xPos, double yPos, double diameter){ 
    super(xPos, yPos, diameter, diameter); 
    this.fillColor = Color.BLACK; 
} 
+0

이것이 반드시 'setFillColor'가하는 유일한 것은 아니기 때문입니다. 이것이 사실이라고 말하는 것은 아니지만 적절한 캡슐화를 피할 수 있습니다. –

+0

fillColor는 GOval의 생성자 내에서 private로 선언되므로 그렇게 할 수 없습니다. 그리고 Color fillColor를 사용하여 Ball 내에서 인스턴스 변수를 직접 선언하려고하면 오류가 발생하지 않지만 색상도 변경되지 않습니다. 너무 나빴어. 그러나 나는 그것을 지금 작동하게했다! – Joop

1

예를 호출 할 수있는 다른 방법을 호출하는 대신 직접 설정할 수 없습니다.

관련 문제