protected:“友好的一种”

王朝other·作者佚名  2008-05-31
宽屏版  字体: |||超大  

protected(受到保护的)访问指示符要求大家提前有所熟悉。首先应注重这样一个事实:为继续学习本书一直到继续那一章之前的内容,并不一定需要先理解本小节的内容。但为了保持内容的完整,这儿仍然要对此进行简要说明,并提供相关的例子。

protected要害字为我们引入了一种名为“继续”的概念,它以现有的类为基础,并在其中加入新的成员,同时不会对现有的类产生影响——我们将这种现有的类称为“基础类”或者“基本类”(Base Class)。亦可改变那个类现有成员的行为。对于从一个现有类的继续,我们说自己的新类“扩展”(extends)了那个现有的类。如下所示:

class Foo extends Bar {

类定义剩余的部分看起来是完全相同的。

若新建一个包,并从另一个包内的某个类里继续,则唯一能够访问的成员就是原来那个包的public成员。当然,假如在相同的包里进行继续,那么继续获得的包能够访问所有“友好”的成员。有些时候,基础类的创建者喜欢提供一个非凡的成员,并答应访问衍生类。这正是protected的工作。若往回引用5.2.2小节“public:接口访问”的那个Cookie.Java文件,则下面这个类就不能访问“友好”的成员:

//: ChocolateChip.java

// Can't Access friendly member

// in another class

import c05.dessert.*;

public class ChocolateChip extends Cookie {

public ChocolateChip() {

System.out.println(

"ChocolateChip constrUCtor");

}

public static void main(String[] args) {

ChocolateChip x = new ChocolateChip();

//! x.foo(); // Can't access foo

}

} ///:~

对于继续,值得注重的一件有趣的事情是倘若方法foo()存在于类Cookie中,那么它也会存在于从Cookie继续的所有类中。但由于foo()在外部的包里是“友好”的,所以我们不能使用它。当然,亦可将其变成public。但这样一来,由于所有人都能自由访问它,所以可能并非我们所希望的局面。若象下面这样修改类Cookie:

public class Cookie {

public Cookie() {

System.out.println("Cookie constructor");

}

protected void foo() {

System.out.println("foo");

}

}

那么仍然能在包dessert里“友好”地访问foo(),但从Cookie继续的其他东西亦可自由地访问它。然而,它并非公共的(public)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有