基于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 方法

相关文章

  • Spring cloud Feign 深度学习与应用详解

    Spring cloud Feign 深度学习与应用详解

    这篇文章主要介绍了Spring cloud Feign 深度学习与应用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • 在Spring Boot使用Undertow服务的方法

    在Spring Boot使用Undertow服务的方法

    Undertow是RedHAT红帽公司开源的产品,采用JAVA开发,是一款灵活,高性能的web服务器,提供了NIO的阻塞/非阻塞API,也是Wildfly的默认Web容器,这篇文章给大家介绍了在Spring Boot使用Undertow服务的方法,感兴趣的朋友跟随小编一起看看吧
    2023-05-05
  • Java中三种零拷贝的实现示例以及对比详解

    Java中三种零拷贝的实现示例以及对比详解

    这篇文章主要介绍了Java中三种零拷贝的实现示例以及对比详解,本文主要是介绍几种零拷贝的实现示例,以及与最传统的做一个对比,看看在效率上到底有多大的提升,需要的朋友可以参考下
    2023-12-12
  • 实例解析Java设计模式编程中的适配器模式使用

    实例解析Java设计模式编程中的适配器模式使用

    本篇文章主要通过实例对适配器模式进行了详解,需要的朋友可以参考下
    2017-04-04
  • AsyncHttpClient KeepAliveStrategy源码流程解读

    AsyncHttpClient KeepAliveStrategy源码流程解读

    这篇文章主要为大家介绍了AsyncHttpClient KeepAliveStrategy源码流程解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 深入理解java final不可变性

    深入理解java final不可变性

    本文主要介绍了讲讲java final不可变性,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java实现利用广度优先遍历(BFS)计算最短路径的方法

    Java实现利用广度优先遍历(BFS)计算最短路径的方法

    这篇文章主要介绍了Java实现利用广度优先遍历(BFS)计算最短路径的方法,实例分析了广度优先遍历算法的原理与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • springboot短信验证码登录功能的实现

    springboot短信验证码登录功能的实现

    这篇文章主要介绍了springboot短信验证码登录功能的实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • 认识Java底层操作系统与并发基础

    认识Java底层操作系统与并发基础

    这篇文章主要介绍了认识Java底层操作系统与并发基础,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • Spring Aware接口示例代码详解

    Spring Aware接口示例代码详解

    Spring的依赖注入的最大亮点是所有的Bean对Spring容器的存在是没有意识的,我们可以将Spring容器换成其他的容器,Spring容器中的Bean的耦合度因此也是极低的,本文给大家介绍Spring Aware接口示例代码详解,感兴趣的朋友一起看看吧
    2022-02-02

最新评论