`

【解惑】真正理解了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 方法

分享到:
评论
3 楼 鲁曼1991 2017-09-19  
说的都有道理,protected只能被同一级包的类所调用
2 楼 ningzhiyuan 2015-10-13  
同意二楼的看法
1 楼 rxy006 2014-01-06  
博主你好,关于你在上文中提到的“子类只能在自己的作用范围内访问自己继承的那个父类protected域,而无法到访问别的子类(同父类的亲兄弟)所继承的protected域”,我有一些不同的看法。在上面的例子中,Rat类无法访问Cat类的crowl方法,我觉得,这是因为Cat类并没有覆盖从Animal类继承得来的crowl方法,所以Rat类中cat.crowl()这句,实际上是对Animal类中crowl方法的调用,而Animal类中的crowl方法被声明为protected,但Rat类和Animal类又属于不同的包,所以会出现crowl方法方法不可见的现象。我试验过,对于上面的例子,如果把Rat类和Animal类放在同一包中,Cat类仍在另一包中(此时需要把Cat类声明为public),就不会出现crowl方法不可见的现象。以上都是我的一些想法,如有误,还望博主指正。

相关推荐

    Java解惑(中文版)_java_java解惑_solve65p_

    3. **封装**:学习如何通过访问修饰符来实现数据隐藏,理解public、private、protected等关键字的作用。 4. **继承**:理解单一继承的概念,以及如何通过extends关键字来实现类之间的继承关系,同时掌握super关键字...

    java 解惑 java 解惑 java 解惑

    java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑

    java解惑java解惑java解惑

    - **访问修饰符**:public、private、protected和默认,它们控制了类成员的可见性。 3. **异常处理** - **try-catch-finally**:Java的异常处理机制,用于捕获和处理运行时错误。 - **自定义异常**:当标准异常...

    IT学生解惑真经 IT学生解惑真经

    《IT学生解惑真经》是一本专门为在IT领域学习和探索的学生们量身打造的知识宝典。这本书的目的是帮助那些在信息技术世界中迷失方向、渴望深入理解和掌握核心技术的学子们,提供一套全面且实用的学习指南。书中的内容...

    SQL解惑解惑

    SQL解惑解惑,意味着我们将深入探讨SQL的常见问题、概念以及解决策略。在这个过程中,我们不仅要理解SQL的基本语法,还要掌握如何有效地查询、更新和管理数据。 首先,让我们从SQL的基础开始。SQL分为四大主要部分...

    JAVA解惑.pdf

    《JAVA解惑》这本书主要针对Java编程中遇到的各种常见问题和困惑进行了解答,旨在帮助开发者深入理解Java语言,提高编程技巧。以下是一些关键的知识点解析: 1. **异常处理**:Java中的异常处理是通过try-catch-...

    SQL解惑 第二版(中文)pdf带目录

    《SQL解惑 第二版(中文)》是一本专门针对SQL语言疑难点进行解析的书籍,旨在帮助读者在实践中理解和掌握SQL的各种特性和技巧。这本书以其独特的案例解析方式,为学习SQL的人提供了一种生动、易懂的学习路径,避免...

    Java解惑 中文版

    《Java解惑中文版》是一本专为Java程序员设计的指南,旨在帮助读者解决在编程过程中遇到的各种问题,提升程序的健壮性。本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更...

    java解惑 PDF版

    文档《java解惑 PDF版》中列举了95个这样的谜题,每个谜题都旨在帮助开发者理解并纠正一些常见的错误理解。以下是根据提供的部分内容解析的几个相关知识点。 ### 表达式谜题与取余操作符(%)的行为 在Java中,...

    Java解惑.pdf

    Java编程语言是世界上最流行的开发平台之一,广泛应用于企业级应用、...通过深入学习和理解这些Java知识点,并结合"Java解惑.pdf"文档中的实例和解决方案,开发者可以更好地解决实际开发中遇到的问题,提升编程技能。

    最新版的Java-解惑

    《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和实践中遇到的各种问题。这本书深入浅出地解析了Java编程中的常见困惑,涵盖了语言基础、类库应用、多线程、网络编程、异常处理、内存...

    C语言解惑

    2. **变量和常量**:理解变量的声明、初始化和作用域,以及常量的定义和使用,对编写有效代码至关重要。 3. **运算符和表达式**:C语言支持多种运算符,如算术运算符、比较运算符、逻辑运算符等,理解运算符优先级...

    JAVA 解惑 java经典

    "JAVA解惑"的主题针对的是Java学习过程中遇到的一些常见问题和难点,旨在帮助开发者深入理解和解决这些问题。以下是基于这个主题和描述可能涵盖的一些关键知识点: 1. **Java基础**:这可能包括变量、数据类型、...

    c语言解惑.pdf

    由于提供的文件内容主要是关于版权声明和免责申明,而不是关于C语言的具体编程知识或解惑内容,所以无法从这部分内容中提取出技术知识点。然而,根据标题和描述提供的信息,我们可以猜测这份文件可能是包含了一系列...

    Java解惑

    理解synchronized、volatile关键字的作用,以及线程池的使用,能帮助我们编写出安全且高效的并发代码。另外,Java内存模型JMM(Java Memory Model)也需有所了解,它规定了线程间的可见性和内存一致性。 最后,垃圾...

    IT解惑(IT学生解惑真经、程序员羊皮卷、高质量c编程指南)

    《IT解惑》是一部综合性的资源集合,包含了《IT学生解惑真经》、《程序员羊皮卷》和《高质量C编程指南》三部分,旨在为计算机科学与技术的学习者和未来的职业程序员提供全面的指导和建议。这些文档分别关注了IT学生...

    2010年-Java解惑(中文)

    《Java解惑(中文)》是一本专注于解决Java编程中常见问题和困惑的资源集合,旨在帮助初学者和有经验的开发者更好地理解和掌握Java语言。本文将深入探讨Java编程中的关键概念、常见问题以及解决方案。 1. **Java...

    SQL解惑(第2版)

    《SQL解惑》通过展示多种解决方案,帮助程序员理解和掌握这些问题,并指导他们如何灵活运用SQL语言来满足各种复杂的数据处理需求。 此外,对于想要深入学习SQL语言的读者来说,本书不仅仅提供了解决方案,更重要的...

    EXCEL函数公式解惑专集

    Excel函数公式是Excel电子表格软件中的核心功能,用于进行数据计算、分析和处理。本专集将深入探讨Excel函数公式的应用..."EXCEL函数公式解惑专集.CHM"文件应该包含了更多实例和详解,帮助你深化理解并提升Excel技能。

Global site tag (gtag.js) - Google Analytics