基于Java protected的深入理解

fr_加油

fr_加油

2016-02-19 09:22

今天图老师小编给大家介绍下基于Java protected的深入理解,平时喜欢基于Java protected的深入理解的朋友赶紧收藏起来吧!记得点赞哦~
一提到访问控制符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 方法
展开更多 50%)
分享

猜你喜欢

基于Java protected的深入理解

编程语言 网络编程
基于Java protected的深入理解

java 递归深入理解

编程语言 网络编程
java 递归深入理解

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

基于Java Tomcat和激活MyEclips的深入理解

编程语言 网络编程
基于Java Tomcat和激活MyEclips的深入理解

Java容器类的深入理解

编程语言 网络编程
Java容器类的深入理解

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

java加密枝术深入理解

编程语言 网络编程
java加密枝术深入理解

Java线程中断的本质深入理解

编程语言 网络编程
Java线程中断的本质深入理解

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

阿波罗 炫耀和堕落 - QQ图案分组

阿波罗 炫耀和堕落 - QQ图案分组

ProC 连接Oracle代码

ProC 连接Oracle代码
下拉加载更多内容 ↓