不要在覆写的方法中用super

@Override是语义的检查,IDE会检查父类是否存在对应的方法,如果有,则检查是否允许覆写,如果是final则不允许,否则编译成功。

但是在子类覆写的方法调用super则没有了覆写的意义,而具有扩展的意义,因为你并没有取代父类的方法而是在其结果后执行了自己增加的行为

public class SuperClass { 
    public void save() { 
         // Perform save logic
    }
}

public class SubClass extends SuperClass {
    private Object b;
    @Override
    public void save() { 
        super.save(); // Performs the save logic for SuperClass
        save(b); // Perform additional save logic
    }
}

但是注意,如果父类的save方法中调用了其他的方法,且被子类覆写,那么只会调用子类的方法,因为此时只有一个this,那就是子类本身,super中的this此时已经动态链接到了子类,

任何的调用,都与父类无关,所以除非是构造函数,通常在成员函数中调用super是一种坏的味道,因为这个时候,你已经无法控制其真实的行为。

转载于:https://www.cnblogs.com/crazywings/archive/2013/06/09/3129432.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值