多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## [创建内部类](https://lingcoder.gitee.io/onjava8/#/book/11-Inner-Classes?id=%e5%88%9b%e5%bb%ba%e5%86%85%e9%83%a8%e7%b1%bb) 创建内部类的方式就如同你想的一样——把类的定义置于外部类的里面: ~~~ // innerclasses/Parcel1.java // Creating inner classes 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); System.out.println(d.readLabel()); } public static void main(String[] args) { Parcel1 p = new Parcel1(); p.ship("Tasmania"); } } ~~~ 输出为: ~~~ Tasmania ~~~ 当我们在`ship()`方法里面使用内部类的时候,与使用普通类没什么不同。在这里,明显的区别只是内部类的名字是嵌套在**Parcel1**里面的。 更典型的情况是,外部类将有一个方法,该方法返回一个指向内部类的引用,就像在`to()`和`contents()`方法中看到的那样: ~~~ // innerclasses/Parcel2.java // Returning a reference to an inner class 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 contents() { return new Contents(); } public void ship(String dest) { Contents c = contents(); Destination d = to(dest); System.out.println(d.readLabel()); } public static void main(String[] args) { Parcel2 p = new Parcel2(); p.ship("Tasmania"); Parcel2 q = new Parcel2(); // Defining references to inner classes: Parcel2.Contents c = q.contents(); Parcel2.Destination d = q.to("Borneo"); } } ~~~ 输出为: ~~~ Tasmania ~~~ 如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象,那么必须像在`main()`方法中那样,具体地指明这个对象的类型:*OuterClassName.InnerClassName*。(译者注:在外部类的静态方法中也可以直接指明类型*InnerClassName*,在其他类中需要指明*OuterClassName.InnerClassName*。)