2016-05-31 1 views
0

필드 속성에 대한 액세스 메소드 (get/set)가있는 경우 필드 속성을 직접 참조하는 것이 좋지 않습니까?액세스 메소드 또는 직접 수퍼 클래스로 attributtes를 참조 하시겠습니까?

또한 JComponents를 다룰 때 이전 시험에서는 클래스 필드에서 초기화 할 수없는 이유가없는 경우 생성자에서 필드 attributtes를 초기화합니다. 이것에 대한 좋은 이유가 있습니까, 아니면 자유롭게 선택할 수 있습니까?

+1

1 일반적으로 접근기가있는 지점을 무시하기 때문에 그렇습니다. 2 스타일의 문제입니다. 코드를 평가하는 사람이 선호하는 스타일을 사용하는 것이 좋습니다. – khelwood

+0

첫 번째 질문에 대한 답변 : http://stackoverflow.com/questions/1568091/why-use-getters-and-setters – Akah

+0

나는 본다. 필드의 변수를 설정 한 후 생성자에서 8 개의 필드 구성 요소를 초기화하고 시험을 위해 종이에 글을 써야한다는 점이 다소 실망 스럽습니다. 내가 그 때 그것을 빨아 줘야 할 것 같아. –

답변

1

개인 필드에 대한 getter 및 setter를 생성하면 클래스의 내부 구현을 숨길 수 있습니다. 즉, 외부 인터페이스를 다른 클래스로 변경하지 않고도 내부 표현을 변경할 수 있습니다.

예를 들어 일련의 값과 비슷한 데이터 구조를 구현하는 사용자 정의 클래스가있는 경우. 첫 번째 구현에서는 값 배열을 사용할 수 있습니다.

몇 가지 새로운 기능을 추가하면 값의 내부 표현을 배열에서 목록으로 변경할 수 있습니다.

여기 예입니다. 배열을 사용하여

원래 코드 :

public class MySequence { 
    private Object[] values; 

    public Object[] getValues() { 
     return values; 
    } 

    public void setValues(Object[] values) { 
     this.values = values; 
    } 
} 

은 그런 생각에 새 값을 추가하는 방법을 만드는 것이 좋습니다 될 수 있습니다. 여기서 은 내부 구현을 변경할 수 있으며 MySequence 클래스의 사용자와 동일한 인터페이스를 유지합니다.

public class MySequence { 
    private List<Object> values; 

    public void add(Object value) { 
     values.add(value); 
    } 

    public Object[] getValues() { 
     return values.toArray(new Object[values.size()]); 
    } 

    public void setValues(Object[] values) { 
     this.values = Arrays.asList(values); 
    } 
} 
관련 문제