手机
当前位置:查字典教程网 >编程开发 >Java >基于Java protected的深入理解
基于Java protected的深入理解
摘要:一提到访问控制符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 方法

【基于Java protected的深入理解】相关文章:

基于Java回顾之集合的总结概述

基于Java ORM框架的使用详解

基于java中BlockingQueue的使用介绍

基于Java的打包jar、war、ear包的作用与区别详解

基于Java回顾之多线程同步的使用详解

Java中HashMap和TreeMap的区别深入理解

基于Java 注解(Annotation)的基本概念详解

java加密枝术深入理解

基于Java实现缓存Cache的深入分析

基于java TCP网络通信的实例详解

精品推荐
分类导航