1. A class defined within another class is called an inner class.
2. Inner classes are distinctly different from composition. (inner classes > composition)
// innerclasses/Parcel2.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// 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) { // returns a reference to an inner class Destination
return new Destination(s);
}
public Contents contents() { // returns a reference to an inner class 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(); // note this
Parcel2.Destination d = q.to("Borneo");
}
}
/* Output:
Tasmania
*/
references:
1. On Java 8 - Bruce Eckel
2. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/innerclasses/Parcel2.java