实现效果:子类中重写init方法,必须使用super.init()调用A类的init方法,否则编译不通过。
1、父类A:(你定义的类,供别人继承)
class A{
public void init(){
//do something for class A
}
}
2、子类B:(别人的类,继承你的类A)
class B extends A{
public void init(){
//do something for class B
super.init();//这句话删掉就会报错
}
}
这种方式好像在哪里看到过?没错,Activity的每一个生命周期的方法里面都是这样,你重写了它,也是需要回调父类的此方法的。那我们就看一下他是怎么实现的。
以onCreate为例:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.....
}
Ctrl+单击追super.onCreate,一直追一直追,追到了Activity类里面:
@MainThread
@CallSuper
protected void onCreate(@Nullable Bundle savedInstanceState) {
......
}
看到了一个顾名思义的注解:@CallSuper,他的代码如下:
@Documented
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.METHOD})
public @interface CallSuper {
}
没错,我们要的就是这个注解,那我们就实现想要的需求了:在A类的init方法上面声明这个注解。那么B类在重写完塔这个init方法之后就必须重写super.init()了:
class A{
@CallSuper
public void init(){
//do something for class A
}
}
打完收工。