java内部类_Java编程思想:内部类

61d82908284254dd99862618d15e1273.png

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

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

//: 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()中展示的那样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值