下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

java中的protected(C++和C#)

作者:课课家教育     来源: http://www.kokojia.com点击数:906发布时间: 2016-02-01 13:49:03

标签: java入门教材java敏捷开发java网络开发

大神带你学编程,欢迎选课

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

java中的protected(C++和C#)_java入门教材_java敏捷开发_课课家

  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)。

赞(17)
踩(4)
分享到:
华为认证网络工程师 HCIE直播课视频教程