你是否真正理解了protected的作用范围呢?
来源:互联网 发布:软件开发工程量清单 编辑:程序博客网 时间:2024/05/16 19:21
你是否真正理解了protected 的作用范围呢?
一提到访问控制符protected ,即使是初学者一般都会很自信的认为自己在这方面的理解没有问题。那好,我们提一个问题出来看看.....
问题提出:
请看下面两端代码,其中包B中的猫和鼠都继承了动物类。
- /代码1:包A中有一个动物类
- package testa;
- public class Animal{
- protected void crowl(Stringc){
- System.out.println(c);
- }
- }
- //代码2:包B中有两个类——猫类和鼠类
- package testb;
- import testa.Animal;
- class Cat extends Animal{
- }
- class Rat extends Animal{
- public void crowl(){
- crowl( "zhizhi" ); //没有问题,继承了Animal中的protected 方法——crowl(String)
- Catcat= new Cat();
- cat.crowl( "miaomiao" ); //wrong,Themethodcrowl(String)fromthetypeAnimalisnotvisible
- }
- }
既然,猫和鼠都继承了动物类,那么在鼠类的作用范围内,看不到猫所继承的crowl()方法呢?
症结所在:
protected 受访问保护规则是很微妙的。虽然protected 域对所有子类都可见。但是有一点很重要,子类只能在自己的作用范围内访问自己继承的那个父类protected 域,而无法到访问别的子类(同父类的亲兄弟)所继承的protected 域。 说白了就是:老鼠只能叫"zhi,zhi"。即使他能看见猫(可以在自己的作用域内创建一个cat对象),也永远无法学会猫叫。
也就是说,cat所继承的crowl方法在cat类作用范围内可见。但在rat类作用范围内不可见,即使rat,cat是亲兄弟也不行。
附: 这就是为什么我们在用clone方法的时候不能简单的直接将对象aObject.clone()出来的原因了。
- 你是否真正理解了protected的作用范围呢?
- 你是否真正理解了protected的作用范围呢?
- 真正理解了protected的作用范围
- 真正理解了protected的作用范围
- 【解惑】真正理解了protected的作用范围
- protected的作用范围
- 你是否重视研究关键词了呢
- java中 private default protected 和 public的作用范围
- 你如何知道你是否真正找到了你爱的人?
- 你以为你的protected控制访问符理解透彻了吗
- 你真正理解 ReserveFile 了吗?
- protected的范围及private static的理解
- 如果你可以量化某个事物的时候,你就真正理解了它
- 你是否清楚,什么是真正的八拜之交?
- java中public、private、protected作用范围
- public、private、protected、friendly作用域范围
- 基础才是重中之重之你是否真正理解static对象
- 一步步了解ESB (一)你是否真正理解ESB?
- 2012 2013
- Visual Studio 调试 IIS 网站
- C语言程序的内存分配方式
- Android APK 签名比对
- C语言内存分配时间
- 你是否真正理解了protected的作用范围呢?
- android中aidl接口的作用
- Android 常用 mimeType 表
- 开发中遇到的DLL问题思考及解决方法 2008-06-27 20:49:18
- 安卓中的hander
- Oracle数据库表连接方式及常见用法
- struts2:关于EL能够获得action的属性
- hdu 2588
- android中textview的左右对齐