2013-03-29 8 views
4

과제 작업 중입니다. 어떻게해야하는지 혼란 스럽다.Java - 접근 자 및 뮤 테이타 메서드 사용

질문 :

이 사람의 이름, ID 번호, 과 사람의에 photogrpah를 포함하는 파일의 이름을 포함 IDCard라는 클래스를 만듭니다. 각 필드에 대해 접근 자 및 변경자 메서드를 작성하십시오. 클래스에 다음과 같은 두 가지 오버로드 된 생성자를 추가

공공 IDCard() 공공 IDCard (문자열 N, INT의 ID, 문자열 파일 이름)이 두 생성자를 사용하여 밖으로 인쇄 다른 ojbects를 만들어

테스트 프로그램 콘솔상의 값은 액세서와 뮤 테이터 메소드를 사용합니다.

지금까지이를 다시 작성했습니다 :

public class IDCard { 
String Name, FileName; 
int ID; 

public static void main(String[] args) { 

} 

public IDCard() 
{ 
    this.Name = getName(); 
    this.FileName = getFileName(); 
    this.ID = getID(); 
} 

public IDCard(String n, int ID, String filename) 
{ 

} 

public String getName() 
{ 
    return "Jack Smith"; 
} 

public String getFileName() 
{ 
    return "Jack.jpg"; 
} 

public int getID() 
{ 

     return 555; 
    } 
} 
+1

차단 대상은 무엇입니까? – smk

+2

액세서는 고정되어 있지 않아야합니다. – sp00m

+0

캡슐화에 대한 수십 가지 자습서가 있습니다. 또한 명명 규칙을 존중합니다. –

답변

29

기본 사항을 살펴 보겠습니다. "접근 자"와 "돌연변이 체"는 getter와 setter에 대한 멋진 이름입니다. getter "접근 자"는 클래스의 변수 또는 해당 값을 반환합니다. setter 인 "Mutator"는 클래스의 변수 또는 값을 설정합니다. 오

public class IDCard 
{ 
    private String mName; 
    private String mFileName; 
    private int mID; 

} 

그러나 :

그래서 먼저이 설정/얻기 위해 몇 가지 변수 클래스를 설정해야합니다! 이 클래스를 인스턴스화하면 이러한 변수의 기본값이 의미가 없습니다. B.T.W. "인스턴스화는"멋진 일을위한 단어입니다

IDCard test = new IDCard(); 

그래서 -의가 기본 생성자를 설정할 수 있습니다, 이것은 당신이 클래스를 "인스턴스화"때 호출되는 방법이다.

public IDCard() 
{ 
    mName = ""; 
    mFileName = ""; 
    mID = -1; 
} 

하지만 변수를 제공하려는 값을 알고 있다면 어떻게 될까요? 자, 매개 변수를 취하는 다른 생성자를 만들어 봅시다.

public IDCard(String name, int ID, String filename) 
{ 
    mName = name; 
    mID = ID; 
    mFileName = filename; 
} 

와우 - 이거 좋네요. 하지만 어리석은. 왜냐하면 우리는 변수의 값에 접근 (읽기) 할 방법이 없기 때문입니다. getter를 추가하고 setter도 추가하십시오.

public String getName() 
{ 
    return mName; 
} 

public void setName(String name) 
{ 
    mName = name; 
} 

Nice. 이제 mName에 액세스 할 수 있습니다. 나머지 접근 자와 mutator를 추가하면 인증 된 Java 초보자가됩니다. 행운을 비네.

+0

나는 그것을 결국 알아낼 수 있었다. 저는 C#에 익숙합니다. 꽤 복잡한 프로그램을 만들었지 만 지금은 Java를 배우고 있습니다. 오류가 난 후에도 계속 오류가 발생했습니다. 나는 이클립스를 사용하기 시작했고 그것은 계속 나에게 말하고 있었다. 이것을 사용한다. 이것을 사용하지 않는다. 이것을 사용하지 않는다. 내 코드를 너희들이 본 것을 도살 한 것 같다. 감사합니다. – Pichu

+1

놀라운 설명 방법. – ashishdhiman2007

2

당신은 당신의 접근 방법에서 static를 제거해야합니다 -이 방법은 인스턴스 변수 인스턴스 메소드하고 접근 할 필요가

public class IDCard { 
    public String name, fileName; 
    public int id; 

    public IDCard(final String name, final String fileName, final int id) { 
     this.name = name; 
     this.fileName = fileName 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 
} 

IDCard을 만들고 액세스자를 다음과 같이 사용할 수 있습니다.

final IDCard card = new IDCard(); 
card.getName(); 

new에 전화 할 때마다 IDCard의 새 인스턴스가 만들어지고 3 개의 변수가 포함됩니다.

static 키워드를 사용하는 경우 해당 변수는 모든 인스턴스에서 공통적으로 IDCard입니다.

마인드에 두어야 할 사항 몇 :

  1. 쓸모 의견을 추가하지 않습니다는 - 그들은 코드의 혼란과 아무것도를 추가합니다.
  2. 명명 규칙을 준수하면 변수 이름의 소문자를 사용 - nameName이 아닙니다.
+0

제출 요구 사항의 일부로 의견을 추가해야합니다. 나는 그것을 개정하고 내가 지금까지 가지고있는 것과 함께 메인 포스트를 업데이트했다. – Pichu

+0

Boris, 생성자에 접근자를 추가하는 것이 좋습니다. –

+1

@VasileSurdu no. 접근 자들이'final'이 아니라면 당신은 재정의 될 수있는 메소드를 호출하고 있습니다. 이 경우 슈퍼 클래스의 생성자는 완전히 초기화되기 전에 서브 클래스에서 메소드를 호출합니다. 이것은 매우 교활한 버그입니다. –