1.抽象类:含有抽象方法的类被称为抽象类里面可以有抽象的方法和具体的方法体
2.抽象方法:指在类中没有方法体的方法不能被声明为private,且abstract不能与final并列修饰同一个类,否则子类无 法继承**
示例代码包含抽象类和类中抽象方法(常用的抽象类例如BaseActivity,BsseFragment等里面可以有具体的方法,和抽象方法,也没有可以抽象方法 但是就失去了抽象方法就是为了寄存的意义了)
public abstract class BaseActivity extends FragmentActivity { **抽象类**,**抽象类**,**抽象类**
@Override
protected void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
savedInstanceState.putParcelable("android:support:fragments",null);
}
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setLayout();
// 注入控件
ViewUtils.inject(this);
init(savedInstanceState);
}
/**
* 设置布局
*/
public abstract void setLayout(); **抽象方法没有方法体,抽象方法没有方法体**
/**
* 填充数据
*/
public abstract void init(Bundle savedInstanceState);**抽象方法没有方法体,抽象方法没有方法体**
/**
* 通过类名启动Activity
*
* @param pClass
*/
protected void openActivity(Class<?> pClass) { **具体方法有具体方法体,具体方法有具体方法体**
openActivity(pClass, null);
}
}
子类继承抽象类后并实现抽象方法的实例
public class MainActivity extends BaseActivity{
@Override
public void setLayout() { **子类继承父类的抽象方法重写方法体**
setContentView(R.layout.activity_main);
}
@Override
public void init(Bundle savedInstanceState) { **子类继承父类的抽象方法重写方法体**
}
}
3.接口类:接口是一种比抽象类还要抽象的“类”不能含有静态代码块以及静态方法一般用interface修饰,并且一般不在接口中定义变量,子类 采用implements关键字来实现接口
实例代码(声明接口,与子类实现方法常用在activity和fragment中,获取adapter和activity中)
1.在fragment中声明接口给主activity实现变化底部按钮
public class NewDataFra extends BaseFrag {
private ShowEdit showdit;//实例化对象
@Override
public View initView(LayoutInflater inflater) {
return inflater.inflate(R.layout.otherfra, null);
}
@Override
public void initData(Bundle savedInstanceState) {
showdit = (ShowEdit) getActivity();
}
@OnClick({R.id.ll_qb, R.id.ll_zt, R.id.ll_cz, R.id.rl_kpi, R.id.rl_xq,R.id.rl_sx})
public void OnClick(View v) {
switch (v.getId()) {
case R.id.rl_xq:
showdit.showEdit();
break;
}
/**
* 抽象接口给mainactivity去实现
*/
public interface ShowEdit {
void showEdit();
}
}
2.在MainActivity中实现接口并切换底部选中
public class MainActivity extends BaseActivity implements NewDataFra.ShowEdit{**//实现接口**
@Override
public void setLayout() {
setContentView(R.layout.activity_main);
}
@Override
public void init(Bundle savedInstanceState) {
}
**/
* 实现接口里面的方法显示编辑的fragment
*/
@Override
public void showEdit() {
showFrag(4);//显示编辑fragment
}
}