基于Java protected的深入理解

 更新时间:2013年06月04日 16:24:32   作者:  
本篇文章是对Java protected进行了详细的分析介绍,需要的朋友参考下
一提到访问控制符protected,即使是初学者一般都会很自信的认为自己在这方面的理解没有问题。那好,我们提一个问题出来看看.....

请看下面两端代码,其中包B中的猫和鼠都继承了动物类。
复制代码 代码如下:

//代码1:包A中有一个动物类 
package testa; 
public class Animal { 
    protected void crowl(String c){ 
        System.out.println(c); 
    } 

//代码2:包B中有两个类——猫类和鼠类 
package testb; 
import testa.Animal; 
class Cat extends Animal{ 


class Rat extends Animal{ 
    public void crowl(){ 
                crowl("zhi zhi"); //没有问题,继承了Animal中的protected方法——crowl(String) 
            Cat cat=new Cat(); 
                cat.crowl("miao miao"); //wrong, The method crowl(String) from the type Animal is not visible 
    } 


既然,猫和鼠都继承了动物类,那么在鼠类的作用范围内,看不到猫所继承的crowl()方法呢?

症结所在:
protected受访问保护规则是很微妙的。虽然protected域对所有子类都可见。但是有一点很重要,子类只能在自己的作用范围内访问自己继承的那个父类protected域,而无法到访问别的子类(同父类的亲兄弟)所继承的protected域。 说白了就是:老鼠只能叫"zhi,zhi"。即使他能看见猫(可以在自己的作用域内创建一个cat对象),也永远无法学会猫叫。
也就是说,cat所继承的crowl方法在cat类作用范围内可见。但在rat类作用范围内不可见,即使rat,cat是亲兄弟也不行。
另外:这就是为什么我们在用clone方法的时候不能简单的直接将对象aObject.clone()出来的原因了。

总之,当B extends A的时候,在子类B的作用范围内,只能调用本子类B定义的对象的protected方法(该方法从父类A中继承而来)。而不能调用其他A类对象的protected 方法

相关文章

  • Java的Atomic原子类详解

    Java的Atomic原子类详解

    这篇文章主要介绍了Java的Atomic原子类详解,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Kubernetes k8s集群之包管理器Helm方式

    Kubernetes k8s集群之包管理器Helm方式

    这篇文章主要介绍了Kubernetes k8s集群之包管理器Helm方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 浅谈Java 三种方式实现接口校验

    浅谈Java 三种方式实现接口校验

    这篇文章主要介绍了浅谈Java 三种方式实现接口校验,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Java方法重载Overload原理及使用解析

    Java方法重载Overload原理及使用解析

    这篇文章主要介绍了Java方法重载Overload原理及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Spring Boot 集成PageHelper的使用方法

    Spring Boot 集成PageHelper的使用方法

    这篇文章主要介绍了Spring Boot 集成PageHelper的使用方法,文章内容围绕主题展开详细介绍,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-04-04
  • java实现图片的上传与展示实例代码

    java实现图片的上传与展示实例代码

    这篇文章主要给大家介绍了关于java实现图片的上传与展示的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • springBoot 项目排除数据库启动方式

    springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java 实现限流器处理Rest接口请求详解流程

    Java 实现限流器处理Rest接口请求详解流程

    在工作中是否会碰到这样的场景,高并发的请求但是无法全部执行,需要一定的限流。如果你是使用的微服务框架,比如SpringCloud,可以使用Gateway增加限流策略来解决。本篇文章是在没有框架的情况实现限流器
    2021-11-11
  • Java PTA 计算3到7位 水仙花数实例

    Java PTA 计算3到7位 水仙花数实例

    这篇文章主要介绍了Java PTA 计算3到7位 水仙花数实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • java方法重载和参数类型自动提升方式

    java方法重载和参数类型自动提升方式

    这篇文章主要介绍了java方法重载和参数类型自动提升方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02

最新评论