`

protected使用微妙之处

阅读更多

1.protected受访问保护规则是很微妙的。虽然protected域对所有子类都可见。但是有一点很重要,子类只能在自己的作用范围内访问自己继承的那个父类protected域,而无法到访问别的子类(同父类的亲兄弟)所继承的protected域。这就是为什么我们在用clone方法的时候不能简单的直接将对象Object.clone()出来的原因了。(必须实现Cloneable 接口,并重写clone方法,并将访问控制符改为public,这样任何方法中克隆对象。

 

2.完整的访问规则:

 

 

  • 公共属性总能访问
  • 同一包的子类,可以任意使用
  • 同一个包的正常类,可以直接用他的实例进行访问
  • 不同包的正常类,无法访问任何属性和方法
  • 不同包的子类,不能使用父类实例的属性和方法
  • 不同包的子类,不能使用其它包的子类实例的属性和方法
  • 不同包的子类,可以直接使用父类的属性和方法

                • 总之,不同包的子类就规规矩矩的在自己的代码里用父类的属性就行了。其它的使用都是不允许的。

                 3.访问修饰的总结

                      Here is a summary of the four access modifiers in Java that control visibility:

                • Visible to the class only (private).
                • Visible to the world (public).
                • Visible to the package and all subclasses (protected).
                • Visible to the package—the (unfortunate) default. No modifiers are needed.

                 

                分享到:
                评论

                相关推荐

                  基于Java protected的深入理解

                  Java中的`protected`关键字是访问控制修饰符之一,用于定义类的成员(如方法和字段)。`protected`提供了一种保护机制,使得这些成员只对同一包内的类和不同包中的子类可见。在这个深入理解中,我们将详细探讨`...

                  C++大学教程,一本适合初学者的入门教材(part1)

                  6.15 微妙的陷阱:返回对Private数据成员的引用 6.16 通过默认的成员复制进行赋值 6.17 软件复用性 6.18 有关对象的思考:编写电梯模拟程序的类 小结 术语 自测练习 自测练习答案 练习 第7章 类与数据抽象(二) 7...

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

                  "Puzzlers"在这里指的是书中精心设计的一系列编程谜题,通过这些谜题,开发者可以了解到Java语言中的陷阱和微妙之处。 1. **类型转换与强制转换**:Java中存在自动类型转换和显式强制类型转换,但过度依赖这些转换...

                  php 缩略图生成类

                  透明度控制可以让水印更加微妙,不影响主体内容的观看。 实现这些功能时,需要考虑性能优化,比如使用内存缓存避免重复生成,或者使用代理服务器减轻服务器负担。同时,要注意错误处理,例如处理无效的图片文件或...

                  Counting Objects in C++

                  描述中提到,这个过程简单但微妙,需要在类的构造函数和析构函数中分别增加和减少计数器,并提供一个静态成员函数来查询当前对象的数量。 首先,我们可以创建一个静态成员变量`count`来存储对象的数量,然后在`...

                  Java新手指南方法覆盖Java开发Java经验技巧共14

                  - 方法覆盖允许子类对父类中已有的非私有(public、protected或包访问)方法进行重新定义,以实现不同的功能或者增强原有功能。 - 关键字`@Override`用于标记一个方法是覆盖了父类的方法,提高代码可读性和编译时...

                  SCJP 陷阱大全

                  ### 十四、数值比较的微妙之处 `-0.0 == 0.0`的比较结果为`true`,这反映了浮点数的特殊表示方式。在Java中,正零和负零被视为相等。 ### 十五、抽象类与抽象方法的关系 抽象类可以包含具体实现的方法,但至少...

                  EDA/PLD中的如何在C++中struct与Class的的区别

                  - **使用访问修饰符**:如`public`、`private`和`protected`来控制成员的访问级别。 - **使用初始化列表**:通过大括号进行初始化,前提是所有成员都是公有的且为简单类型,没有自定义构造函数。 - **实现继承**:...

                  Android this与Activity.this的区别

                  在Android开发中,`this`和`Activity.this`都是引用当前上下文的关键词,但它们在不同的场景下具有微妙的差异。理解这两者的区别对于编写高效、无误的代码至关重要。 首先,`this`在Java中是一个关键字,它代表当前...

                  C++大学教程,一本适合初学者的入门教材(part2)

                  6.15 微妙的陷阱:返回对Private数据成员的引用 6.16 通过默认的成员复制进行赋值 6.17 软件复用性 6.18 有关对象的思考:编写电梯模拟程序的类 小结 术语 自测练习 自测练习答案 练习 第7章 类与数据抽象(二) 7...

                  获取Office 2010按钮,例如Gradient

                  然后调整发光层的透明度,使其微妙而不刺眼。 3. **绘制边框**:使用`Pen`对象绘制按钮的边框。选择一个与渐变颜色相协调的深色,可以是渐变颜色的较暗版本。通过调整边框的宽度和样式,可以创造出立体感。 4. **...

                  SCJP必掌握的英语词汇

                  **细微差别**是指微妙的不同之处或细节。在编程中,这可能指不同编程语言之间的细微差异或实现特定功能的不同方式。 #### 具体的类 (Concrete Class) **具体的类**是指非抽象类,即具有具体实现的类。在面向对象...

                  C++大学教程

                  2.15 for结构使用举例--------------------------------------------------65 2.16 switch多项选择结构-----------------------------------------------68 2.17 do/while重复结构----------------------------...

                Global site tag (gtag.js) - Google Analytics