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

客服QQ:3315713922

Java学习者须知的java语言中的外部类名内部类名

作者:课课家教育     来源: http://www.kokojia.com点击数:902发布时间: 2016-02-29 20:04:43

标签: javastatic方法java开发零基础学习java

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

  在java 1.1中,可将一个类定义置入另一个类定义中。这就叫作“内部类”。内部类对我们非常有用,因为利用它可对那些逻辑上相互联系的类进行分组,并可控制一个类在另一个类里的“可见性”。然而,我们必须认识到内部类与以前讲述的“合成”方法存在着根本的区别。

Java学习者须知的java语言中的外部类名内部类名_javastatic方法_java开发_课课家

  通常,对内部类的需要并不是特别明显的,至少不会立即感觉到自己需要使用内部类。在本章的末尾,介绍完内部类的所有语法之后,大家会发现一个特别的例子。通过它应该可以清晰地认识到内部类的好处。

  创建内部类的过程是平淡无奇的:将类定义置入一个用于封装它的类内部(若执行这个程序遇到麻烦,):

  //: Parcel1.java

  // Creating inner classes

  package c07.parcel1;

  public class Parcel1 {

  class Contents {

  private int i = 11;

  public int value() { return i; }

  }

  class Destination {

  private String label;

  Destination(String whereTo) {

  label = whereTo;

  }

  String readLabel() { return label; }

  }

  // Using inner classes looks just like

  // using any other class, within Parcel1:

  public void ship(String dest) {

  Contents c = new Contents();

  Destination d = new Destination(dest);

  }

  public static void main(String[] args) {

  Parcel1 p = new Parcel1();

  p.ship("Tanzania");

  }

  } ///:~

  若在ship()内部使用,内部类的使用看起来和其他任何类都没什么分别。在这里,唯一明显的区别就是它的名字嵌套在Parcel1里面。但大家不久就会知道,这其实并非唯一的区别。

  更典型的一种情况是,一个外部类拥有一个特殊的方法,它会返回指向一个内部类的句柄。就象下面这样:

  //: Parcel2.java

  // Returning a handle to an inner class

  package c07.parcel2;

  public class Parcel2 {

  class Contents {

  private int i = 11;

  public int value() { return i; }

  }

  class Destination {

  private String label;

  Destination(String whereTo) {

  label = whereTo;

  }

  String readLabel() { return label; }

  }

  public Destination to(String s) {

  return new Destination(s);

  }

  public Contents cont() {

  return new Contents();

  }

  public void ship(String dest) {

  Contents c = cont();

  Destination d = to(dest);

  }

  public static void main(String[] args) {

  Parcel2 p = new Parcel2();

  p.ship("Tanzania");

  Parcel2 q = new Parcel2();

  // Defining handles to inner classes:

  Parcel2.Contents c = q.cont();

  Parcel2.Destination d = q.to("Borneo");

  }

  } ///:~

  若想在除外部类非static方法内部之外的任何地方生成内部类的一个对象,必须将那个对象的类型设为“外部类名.内部类名”,就象main()中展示的那样。

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