protected(受到保护的)访问指示符要求大家提前有所认识首先应注意这样一个事实为继续学习本书一直到继承那一章之前的内容并不一定需要先理解本小节的内容但为了保持内容的完整这儿仍然要对此进行简要说明并提供相关的例子 protected关键字为我们引入了一种名为继承的概念它以现有的类为基础并在其中加入新的成员同时不会对现有的类产生影响——我们将这种现有的类称为基础类或者基本类(Base Class)亦可改变那个类现有成员的行为对于从一个现有类的继承我们说自己的新类扩展(extends)了那个现有的类如下所示 class Foo extends Bar { 类定义剩余的部分看起来是完全相同的 若新建一个包并从另一个包内的某个类里继承则唯一能够访问的成员就是原来那个包的public成员当然如果在相同的包里进行继承那么继承获得的包能够访问所有友好的成员有些时候基础类的创建者喜欢提供一个特殊的成员并允许访问衍生类这正是protected的工作若往回引用小节public接口访问的那个Cookiejava文件则下面这个类就不能访问友好的成员 //: ChocolateChipjava // Cant access friendly member // in another class import cdessert*; public class ChocolateChip extends Cookie { public ChocolateChip() { Systemoutprintln( ChocolateChip constructor); } public static void main(String[] args) { ChocolateChip x = new ChocolateChip(); //! xfoo(); // Cant access foo } } ///:~ 对于继承值得注意的一件有趣的事情是倘若方法foo()存在于类Cookie中那么它也会存在于从Cookie继承的所有类中但由于foo()在外部的包里是友好的所以我们不能使用它当然亦可将其变成public但这样一来由于所有人都能自由访问它所以可能并非我们所希望的局面若象下面这样修改类Cookie public class Cookie { public Cookie() { Systemoutprintln(Cookie constructor); } protected void foo() { Systemoutprintln(foo); } } 那么仍然能在包dessert里友好地访问foo()但从Cookie继承的其他东西亦可自由地访问它然而它并非公共的(public) |