一提到访问控制符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
方法
分享到:
相关推荐
java解惑java解惑java解惑java解惑java解惑java解惑
Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑
解惑SQL
Java解惑.pdf Java解惑.pdf Java解惑.pdf Java解惑.pdf
JAVA解惑.pdf JAVA解惑.pdf JAVA解惑.pdf
《Java解惑》《Java解惑》《Java解惑》《Java解惑》《Java解惑》《Java解惑》
Java解惑中文版 Java解惑 java健壮程序
SQL解惑(第2版)
EXCEL函数公式解惑专集EXCEL函数公式解惑专集
扫描完整版 解惑大数据 解惑大数据 解惑大数据 解惑大数据
IT 学生解惑经典指导书 IT 学生解惑经典指导书 IT 学生解惑经典指导书 IT 学生解惑经典指导书 IT 学生解惑经典指导书 IT 学生解惑经典指导书 IT 学生解惑经典指导书 IT 学生解惑经典指导书
C语言解惑中文版.pdf 扫描版
IT学生解惑真经
IT 学生解惑真经
这个C语言解惑能帮助C语言初学者更方便地解决一些常见的编程或者理解方面的问题,我觉得是学习C语言的很好助手!!
"java解惑" PDF版本
JAVA解惑,你面包括一些java经典的问题。
C语言解惑。经典C语言解惑
JAVA面试题解惑系列合集 JAVA面试题解惑系列合集 JAVA面试题解惑系列合集