java中的protected
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)。