2011-12-21 1 views
0

두 개의 다른 클래스 및 시간을 개체로 선언 된 군사 및 표준 시간을 표시하려면 시계를 만드는 것입니다.하지만 이제는 clock 클래스를 으로 확장해야합니다. AMPMclocksetAMPM(boolean yes) 메서드가 있습니다. setAMPM(true)에 군사 시간이 표시되고 거짓이면 일반 시간이 표시됩니다. 제가부울 반환 및 다른 메서드 및 개체에서 사용

AMPMclock clockObject = new AMPMclock(); 

clockObject.setHour(16); 
clockObject.setMin(28); 
clockObject.setSec(58); 



    System.out.println(clockObject.toString()); 
    clockObject.tick(); 
    clockObject.setAMPM(false); 
    System.out.println(clockObject.toString()); 

    clockObject.tick(); 
    clockObject.setAMPM(true); 
    System.out.println(clockObject.toString()); 
    clockObject.tick(); 
    System.out.println(clockObject.toString()); 

그러나 제가 clockObject.setAMPM(true) 또는 clockObject.setAMPM(false),369를 이용해 자극

class AMPMclock extends clock 
{ 
    boolean setAMPM(boolean yes) 
    { 
     return yes; 
    } 
} 

class clock 
{ 
    private int hours; 
    private int minutes; 
    private int seconds; 
private boolean yes; 

    setMin.... 

    setHour... 

    setSec.... 

    tick() ///moves the clock 1sec 


    public String toString() 
    { 

     if(yes) return String.format("%d:%02d:%02d %s", (hours == 12 || hours == 0)?12 : hours%12, minutes, seconds, (hours < 12)? "AM" : "PM"); 
     else return String.format("%02d:%02d:%02d",hours,minutes,seconds); 
    //else 
    } 

}


메인 setAMPM 방법을 만들yes 부울은 변경되지 않으므로 다른 방법으로 사용할 수 있습니다. 항상 동일하게 유지됩니다. 어떤 도움이 필요합니까? 세터의 아이디어는 개인 인스턴스 변수를 캡슐화하는 것입니다

boolean ampm = true; 

boolean setAMPM(boolean yes) 
{ 
    ampm = yes; 
    return yes; 
} 
+1

귀하의 질문은 완전히 명확하지 않습니다. 문제가있는 코드를 추가하십시오. –

+0

이 코드는 내 눈을 아프게합니다. –

답변

2

는, 당신은 뭔가를해야합니다. 클래스의 내부 상태를 수정하지 않고 매개 변수를 반환하기 만하면 코드에 아무 것도 "붙지"않습니다.

class Clock { 

    private boolean useAMPM; 

    public void setAMPM(boolean useAMPM) { 
     this.useAMPM = useAMPM; 
    } 

    public boolean isAMPM() { 
     return this.useAMPM; 
    } 
} 
3

: 당신이 AMPM 인스턴스 변수에 예를 들어 설정을 저장하면 TNX

+1

Java Bean 표준을 조정하기 만하면 getter는 isAMPM()이어야합니다. – Marcelo

+0

ok하지만 "clock"클래스 내에서 useAMPM을 사용해야합니다. "private boolean useAMPM;"이라고 선언합니다. 시계가 확장 되더라도 인식되지 않습니다. –

+0

@StefanosVarsanis, AMPM이 하위 클래스와 만 관련이 있다면 간단히 하위 클래스의 구현 세부 사항으로 만들고 필요하면 ToString을 재정의 할 수 있습니다. 그렇지 않으면 슈퍼 클래스에 변수를 넣고 하위 클래스가 볼 수 있도록'private' 대신'protected' 키워드를 사용하여 변수를 열어야합니다. 단점은 같은 패키지에있는 모든 클래스가 그것을 볼 수 있다는 것입니다. 각 접근법을 평가하여 자신의 필요에 가장 적합한 것을 확인해야합니다. –

0

자바 콩 규칙을 따라 할 필요가 있습니까?

달성하려는 목표는 무엇입니까?

public class AMPMClock { 

    private boolean isAMPM; 

    public void setAMPM(boolean ampmFlag){ 
    this.isAMPM = ampmFlag; 
    } 
    public boolean isAMPM(){ 
    return this.isAMPM; 
    } 

} 
0
당신은 아마 멤버 변수에 그것을 저장해야

... 할당

private boolean useAMPM = false; 
    public boolean setAMPM (final boolean wantAMPM) { 
      useAMPM = wantAMPM; 
      return useAMPM; 
    } 
    public void draw() { 
      … 
      if (useAMPM) { /* … */ } else { /* … */ } 
    } 

방법의 람다 목록에서 변수 (당신이하는 방법을 정의 할 때 wantAMPM/yes이 당신처럼, 사람을 지정) 함수가 호출 될 때, 그리고 함수가 반환 될 때 파괴된다. (여러 가지 이유로 모두 final을 선언하는 것이 좋습니다.) 실제로 변수를 Java 프로그램의 { braces } (거의 모든) 쌍 내에서 만들 수 있습니다. } 블록의 끝에 도달하십시오.

구성원 변수 (속성)는 발견 된 개체 인스턴스의 수명 동안 유지됩니다. 예를 들어 Clock clockInstance = new Clock();라고 말하면 clock.useAMPM이 생성되고 clockInstance이 파괴 될 때까지 계속 존재합니다.

관련 문제