Android实现重写父类方法必须调用父类该方法

实现效果:子类中重写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
    }
}

打完收工。

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值