Android의 추상적인 클래스와 인터페이스 실천
7416 단어 Java 기본 사항
추상류에 대해 말하자면 반드시 추상적인 방법을 언급해야 한다. 추상적인 방법은 유형에 방법체가 없는 방법을 가리키고 추상류 중의 추상적인 방법은 반드시 유형에 의해 실현되어야 한다.추상적인 방법을 포함하는 류를 추상류라고 하는데 만약에 추상류가 추상적인 방법을 포함하지 않는다면 되겠습니까?답은 가능하지만 추상류 자체의 용도와 의미를 잃게 된다. 추상적인 방법은 계승을 위해 존재하기 때문이다.
주의점
4
4
4
4
4
2. 인터페이스 정보
인터페이스는 추상적인 클래스보다 더 추상적인'클래스'이다.'클래스'를 붙이는 이유는 인터페이스에 정적 코드 블록과 정적 방법을 포함할 수 없기 때문이다. 또한 인터페이스에서 변수를 정의하지 않고 하위 클래스는implements 키워드로 인터페이스를 실현하기 때문이다.인터페이스의 변수는 public static final 변수로 은밀하게 지정됩니다. (또한 public static final 변수만 가능하며,private 수식으로 컴파일 오류를 보고할 수 있습니다.) 클래스 이름으로 직접 접근할 수 있습니다: Implement Class.방법은 은밀하게public abstract 방법으로 지정되고,public abstract 방법만 지정될 수 있으며, 인터페이스의 모든 방법은 구체적으로 실현될 수 없으며, 인터페이스의 방법은 반드시 추상적인 방법이어야 한다.
인터페이스를 실현하는 비추상적인 서브클래스는 반드시 이 인터페이스의 모든 방법을 실현해야 한다.추상적인 자류는 실현하지 않아도 된다.새 조작부호를 사용하여 인터페이스를 실례화할 수 없지만, 인터페이스 변수를 설명할 수 있습니다. 이 변수는 인터페이스를 실현하는 클래스의 대상을 인용해야 합니다.instanceof를 사용하여 대상이 특정한 인터페이스를 실현했는지 검사할 수 있습니다.예: if(anObject instanceof Comparable) {}.
3. 추상류와 인터페이스의 차이
4. 안드로이드에서 구체적으로 사용
디자인 차원이 다르기 때문에 추상류는 여러 자류의 부류로서 하나의 템플릿식 디자인 모델이다. 만약에 새로운 방법을 추가해야 한다면 추상류에서 실현하면 되고 모든 자류를 수정할 필요가 없다.한편, 인터페이스는 일종의 행위 표준과 같고 방사식 디자인 모델로 표준이 바뀌면 모든 종속도 이에 상응하여 바뀌어야 한다.
인터페이스 인스턴스
public interface IOpenApiDataServiceCallback<T> {
public abstract void onGetData(T data);
public abstract void onGetError(int errorCode, String errorMsg, Throwable error);
}
하위 클래스에서의 실현
@Override
public void onGetData(ActionResponse data) {
mActivitiesLv.onRefreshComplete() ;
if(data.isSuccess()){
mMultiStateView.setViewState(MultiStateView.ViewState.CONTENT,"");
mAdapter.clear() ;
mAdapter.addData(data.data) ;
mAdapter.notifyDataSetChanged() ;
}else{
mMultiStateView.setViewState(MultiStateView.ViewState.EMPTY,data.msg);
}
}
@Override
public void onGetError(int errorCode, String errorMsg, Throwable error) {
mMultiStateView.setViewState(MultiStateView.ViewState.ERROR,this.getResources().getString(R.string.net_error_tip));
}
추상적 방법
public abstract class BaseActivity extends BaseProtectActivity {
protected TitleBarView mHeaderMenu;
protected void initHeader(){
mHeaderMenu = (TitleBarView) findViewById(R.id.main_header) ;
if(mHeaderMenu!=null){
mHeaderMenu.setCommonTitle(View.VISIBLE, View.VISIBLE, View.GONE, View.GONE) ;
mHeaderMenu.setBtnLeft(R.drawable.head_back,
R.string.whitespace);
mHeaderMenu.setBtnLeftOnclickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
}) ;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//SwipeBackHelper.onCreate(this);
setContentView(getContentLayout());
initHeader();
initView();
setListener() ;
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
//SwipeBackHelper.onPostCreate(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//SwipeBackHelper.onDestroy(this);
}
public void setListener() {}
public void initView(){};
protected abstract int getContentLayout();
public void afterLogin(){} ;
}
하위 클래스에서의 실현
protected int getContentLayout() {
return R.layout.mine_action_center;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AtomicStampedReference 구현잠금 해제된 객체 참조: AtomicReference 타임 스탬프가 있는 객체 참조: AtomicStampedReference Pair 클래스 스토리지 원자 객체 및 타임스탬프 volatile 및 Unsafe에서 제...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.