`
mynotes
  • 浏览: 10364 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

【解惑】真正理解了protected的作用范围 (转)

 
阅读更多

一提到访问控制符protected,即使是初学者一般都会很自信的认为自己在这方面的理解没有问题。那好,我们提一个问题出来看看.....

 

问题提出:

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

//代码1:包A中有一个动物类
package testa;
public class Animal {
	protected void crowl(String c){
		System.out.println(c);
	}
}
package testb//在包B的代码中有两个子类
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 方法

 

转自:http://hxraid.iteye.com/blog/522171

分享到:
评论

相关推荐

    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领域学习和探索的学生们量身打造的知识宝典。这本书的目的是帮助那些在信息技术世界中迷失方向、渴望深入理解和掌握核心技术的学子们,提供一套全面且实用的学习指南。书中的内容...

    行业-城投解惑系列之十二-城投转型,从建设者到运营者.rar

    行业-城投解惑系列之十二-城投转型,从建设者到运营者.rar

    SQL解惑解惑

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

    JAVA解惑.pdf

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

    Java解惑.pdf

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

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

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

    JAVA 解惑 java经典

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

    Java解惑 中文版

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

    java解惑 PDF版

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

    java解惑(转)

    【标题】"Java解惑(转)" 涉及到的IT知识点主要集中在Java编程语言的理解和常见问题解决上,这通常包括语法、类库、框架、编程实践等多个方面。以下将详细介绍这些知识点: 1. **Java基础语法**:Java是一种强类型、...

    2010年-Java解惑(中文)

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

    最新版的Java-解惑

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

    C语言解惑

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

    c语言解惑.pdf

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

Global site tag (gtag.js) - Google Analytics