`
天天向上1989
  • 浏览: 419305 次
  • 性别: Icon_minigender_2
  • 来自: 南京
社区版块
存档分类
最新评论

【转】java中关于protected的一些误解

    博客分类:
  • Java
 
阅读更多

1. 我们知道,类成员的访问控制修饰符有public , protected , private,它们形成了四种控制级别:

public : 能访问该类的任何地方可以访问public成员
protected : 该类所属包内的类或该类的派生类可以访问protected成员
无修饰符 : 该类所属包内的类可以访问无修饰符成员
private : 该类本身能访问private成员

 

1.2.  针对protected成员,有一个容易误解的地方,请看下面的代码
//Base.java
package test;
public class Base
{
      protected int i=0;

 

//TestProtected.java
import test.Base;
public class TestProtected extends Base
{
       public static void main(String [] args)
       {
             TestProtected tp = new TestProtected();       
             System.out.println(tp.i); //Correct , 派生类中继承了基类的 protected成员,派生类中能访问派生类对象所继承的 protected成员        
             Base bbb = new Base();
             System.out.println(bbb.i); //Error , 不能访问基类对象的 protected成员        
       }
}

3. 通过以上代码,可以得出结论:在生成派生类时,派生类可以继承基类的protected成员,这个继承的protected成员在派生类内部是可以访问的,但是在派生类内部无法直接访问基类对象的protected成员。
4. 更进一步,一种派生类内部只能访问该种派生类的对象继承的基类protected成员,不能访问基类的其他派生类对象继承的基类protected成员。请看代码:

//Base.java
package test;
public class Base
{
      otected int i=0;

 

//TestProtected.java
import test.Base; 
public class TestProtected extends Base
{
      public static void main(String [] args)
     {
            TestProtected tp1 = new TestProtected();
            derive tp2 = new Derive();         
            System.out.println(tp1.i); // correct
            System.out.println(tp2.i); //Compile error        
      }

 

class Derive extends Base
{
}
分享到:
评论

相关推荐

    Java+Puzzlers(中英文并且带源码)

    《Java+Puzzlers》是一本深受欢迎的Java编程书籍,它主要探讨了在Java编程中容易被忽视或误解的一些小细节。这本书分为中文和英文两个版本,同时附带源代码,帮助读者深入理解问题并进行实践。"Puzzlers"在这里指的...

    JAVA 试题关于基本语法以及输入输出等的题目

    5. **Java 代码安全的误解**: - Java 字节码在解释执行前需要经过校验。 - Java的编译器不参与运行时的执行,执行由JVM的解释器完成。 - 默认情况下,Applet不能访问本地资源。 6. **java.lang.Math 类**: - ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    JavaJava%BEE软件工程师就业求职手册.doc

    - **10.1.2 程序员是吃青春饭的吗**:探讨了关于程序员职业生涯可持续性的常见误解,强调随着经验和技能的增长,程序员的价值也会随之提高。 - **1.1.3 工程开发的分工**:介绍软件开发过程中不同角色的职责,包括...

    农业银行Java基础面试题.pdf

    Collections是Java集合框架的工具类,提供了一些静态方法来操作集合。 这篇文章总结了Java基础面试题中的知识点,从final、finally、finalize的区别到GC的作用等,涵盖了Java的基本语法和集合框架等方面的知识。

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    java代码开发文档

    Java编程规范是开发者遵循的一系列规则和指导原则,它们旨在提高代码质量,减少误解,并促进团队间的有效沟通。通过遵循这些规范,开发者可以创建出易于阅读、调试和扩展的代码。 2. 目标 本规范的主要目标是: -...

    23种设计模式的Java实现

    23. **访问限制模式**:并非GOF的23种设计模式之一,可能是描述中的一种误解,通常Java的访问权限控制(public, protected, private)可以视为一种简单的访问限制。 通过学习这些设计模式,开发者可以提高代码的...

    java编码规范 java编码规范

    Java编码规范是编程实践中至关重要的一个方面,它旨在提高...实际开发中,还应参考Oracle的Java Code Conventions和一些知名开源项目的规范,例如Google的Java Style Guide,以形成适合自己团队的一套完整编码规范。

    认识UML类图素java之UML.doc

    下面我们将详细讨论UML类图中的主要元素及其在Java中的映射。 **类(Class)** 类是UML类图的基本构建块,它代表了对象的模板。一个类有三个主要部分:类名、属性(attributes)和操作(operations)。属性表示类的...

    天津大学JAVA期末考试题型解读与复习建议参考 共6页.pdf

    在Java中,`==`比较的是对象的引用,而不是内容。因此,即使两个对象的属性相同,如果它们不是同一个对象,`==`比较的结果也会是`false`。 - **方法覆盖与继承**:题目3展示了方法覆盖的概念。子类可以重写父类的...

    Java 与 UML 面向对象程序设计

    《Java与UML面向对象程序设计》是一本深入探讨Java编程和统一建模语言(UML)的书籍,尤其适合已经掌握了Java基础知识的学习者进一步提升。面向对象编程是现代软件开发的核心,Java作为一门强大的面向对象语言,广泛...

    JAVA样卷及分析

    选项D则是一个常见的误解,实际上在Java中`class`作为内部成员时,不能使用`private`或`protected`等访问修饰符来修饰,因此选项D不正确。 **知识点**: - `class`关键字的概念 - 类与接口的区别 - 内部类的...

    OOD with Java and UML

    Java通过访问修饰符(public, private, protected)实现封装。 3. **多态**:多态允许不同的对象对同一消息做出不同的响应,增强了程序的灵活性和通用性。Java中的接口和抽象类是实现多态的重要手段。 **UML简介** ...

    JAVA选择题。好题

    在Java编程语言中,选择题通常用来测试程序员对语言特性的理解。让我们深入解析这些题目中的知识点: 1. **不属于容器的是:** - 容器是指能够包含其他组件的组件,例如窗口、面板等。在Java Swing库中,`JWindow`...

    .2.13.java基础试卷A及答案.pdf

    这份".2.13.java基础试卷A及答案.pdf"显然是一份针对初学者或正在学习Java基础的人员的测试卷,涵盖了Java编程的一些关键概念。 首先,试卷中提到的第一个问题涉及了Java中的方法重写(Override)。根据Java的规定...

    Java笔试题.docx

    在上述Java笔试题中,我们可以看到多个关于这些基础知识的题目。 1. 面向对象的特征:面向对象编程(OOP)的特性包括封装、继承和多态。题目中指出,选项C(封装)和D(继承)是面向对象的特征,而A(重载)和B...

    JAVA认证

    在Java中,引用变量实际上是指向对象的一个指针(选项D)。对象存在于堆内存中,而引用变量则存储在栈内存中。引用变量用来存储对象的地址,通过这个地址可以访问到堆内存中的实际对象。这意味着即使引用变量不再...

Global site tag (gtag.js) - Google Analytics