2012-03-04 4 views
1

나는 질문이있다 : 그래서 내가 (내가 thenewboston에서 tuts에서 그것을 가지고) 코드 줄을을 :이해 클래스/객체에 혼란 : D

SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

내 질문은 : 우리는 무엇을 했는가 이 줄? 우리는 SharedPreferences에서 객체를 생성한다고 생각하지만, PreferenceManager 클래스는 SharedPreference의 슈퍼 클래스입니까? OOP와 관계가 있습니까?

모두 감사합니다 ~

PS : D

답변

2

PreferenceManager에는 getDefaultSharedPreferences라는 정적 메서드가 있습니다. 이것이 의미하는 것은 먼저 'PreferenceManager'인스턴스를 생성하지 않고 메소드를 호출 할 수 있다는 것입니다. 정적 메서드는 클래스 내의 인스턴스 변수에서 작동하지 않습니다.

정적 메서드는 개체의 인스턴스를 만들어 반환 할 수 있습니다. 이 경우 정적 메서드는 로컬 변수에 저장하는 새 SharedPreferences 객체를 만듭니다.

이렇게 생각하십시오. 정적 메서드는 개체의 모든 인스턴스에 대해 한 번 존재합니다. 정적 메서드를 호출 할 때마다 각 개체가 알 수있는 것과 상관없이 동일한 작업을 수행합니다. 전달 된 컨텍스트를 기반으로 사용할 수있는 SharedPreferences 객체를 만듭니다.

도움이 되었기를 바랍니다.

+0

Thans 선생님 : D 그래서 그냥 내가이 수행해야합니다 getDefaultSharedPreferences 정적 방법이 아니라고 : PreferenceManager에게를; a.getDefaultSharedPreferences; 사실입니까? : D –

+1

수정. 때로는 Singleton 구현이 있으므로 다음과 같이하면됩니다. PreferenceManger a = PreferenceManager.getInstance(); a.getDefaultSharedPreferences; – Kieveli

1

PreferenceManager 클래스입니다 : 내가 어떤 실수의 만든 경우 영어, 미안 내 기본 languange 없습니다. 즉 : 유형. 네가 'int i;' int는 유형이고, i는 인스턴스 변수입니다.

getDefaultSharedPreferences()는 정적 메서드입니다. 즉, 인스턴스 객체없이 실행할 수 있습니다. 그래서 그것이 '앞에있는 유형입니다.' 변수/인스턴스가 아닙니다.

1

이 코드 조각은 getPrefs 불리는 타입 SharedPreferences 새로운 변수를 생성하고, 클래스의 PreferenceManagergetDefaultSharedPreferences 메소드의 리턴 값으로 그 값을 설정한다.

1

실제로 개체의 인스턴스를 만듭니다. SharedPreferences는 생성하려는 객체 유형이고 getPrefs 변수는 인스턴스를 참조합니다. PreferenceManager는 이미 초기화 된 객체이며 'getDefaultSharedPreferences'라는 메서드를 포함하고 SharedPreferences 객체 인스턴스를 반환합니다.

이를 이해하려고 노력, 예를 만들려면 :

인간 크리스 = Room.pushOutSomebody();

: