java类方法继承为什么其修饰词的范围不能越来越小

来源:互联网 发布:can总线通讯协议 编程 编辑:程序博客网 时间:2024/05/17 16:13
   关于类的继承大家可能知道如题目所说的这一条规则,但是可能有些人没有太注意去理解为什么,网上有没有相关的解释,我自己在这里只是提出相关概念并强行解释一番,“合不合胃口”大家自行取舍。   类在继承时肯定会涉及到方法属性的继承,方法属性当然也都有属于自己的修饰词表明自己的“可见性”范围。这是个很重要的概念,因为在继承中我们很多时候会谈到重写。方法的继承对可见性没有要求,无论你是private还是friendly,还是protected,子类都会把父类中的方法属性都完整继承下来;但是重写则要求父类的方法的修饰词需要时protected或是public这样他们在子类里才可见,也才有机会重写(为什么可见才能重写?这就跟你说要结婚,但是你连媳妇都见不到,你怎么结婚?)   上面说了可见性概念,那它又和我们要讨论的有什么关系?你想想,设计子类的初衷是什么。不就是因为它包含父类中所有的东西包括行为方式,属性特征,这里的行为方式不只是只有方法,还有对方法的限制,假如父类有个方法可以让所有地方可见,你却想设计这个父类的一个子类并且让他的这个方法修饰词只是private也即只有自己可见,那你为什么要继承父类这个方法?这个理由不太充分?确实有点。那好,现在我们假设允许子类的方法继承方法且允许修饰词范围变小并且我们在子类的这个方法中做了重写,假如父类有一个public方法,子类继承它并且把修饰词变成了protected也就是只有子类能见。那么现在我在非子类的类中调用刚才子类的这个protected方法,由于方法不可见,那在别的类中就相当于在子类中没见到这个方法,那么他会去父类中找,好了果然在父类中找到了,结果调用的是父类的方法,但是我们的子类确实重写了父类的方法,不是应该调用子类的重写的方法吗!这又对重写的一部分功能特性造成污染,所以我们说这种情况不允许存在。
原创粉丝点击