Java编程思想创建内部类(P191)里面有这样一句话,“如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象,那么必须想在main()方法中那样,具体地指明这个对象的类型:OutClassName.InnerClassName”。这句话该怎么理解?
是该理解为:在外部类中,静态方法中创建内部类的对象要指明类型OutClassName.InnerClassName,非静态方法中创建内部类的对象指明类型InnerClassName吗?但是示例代码中静态方法main()中创建内部类对象c和d时去掉OuterClassName也可以编译运行,求解释!//: 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");
}
} /* Output:
Tasmania
*///:~
//: 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:
Contents c = q.contents();
Destination d = q.to("Borneo");
}
} /* Output:
Tasmania
*///:~
是该理解为:在外部类中,静态方法中创建内部类的对象要指明类型OutClassName.InnerClassName,非静态方法中创建内部类的对象指明类型InnerClassName吗?但是示例代码中静态方法main()中创建内部类对象c和d时去掉OuterClassName也可以编译运行,求解释!//: 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");
}
} /* Output:
Tasmania
*///:~
//: 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:
Contents c = q.contents();
Destination d = q.to("Borneo");
}
} /* Output:
Tasmania
*///:~
解决方案 »
- 求高手~~java中textarea的使用。如何通过循环获得信息后换行打印出新的数据。
- 请教怎么去学校JAVA的包呢?
- java能 开发 桌面应用程序吗? 或者说java 开发 的桌面应用程序有实际应用吗?
- 如何执行abc.jar中的类A和类B?
- 抽象方法为何不能同时是synchronized的?
- apllet 在使用 KeyListener 时 的问题 难道是Applet不是用KeyListener做键盘事件?
- 入门救助
- 如果要输出打印的文件格式不是系统默认的怎么处理?
- 可以给Applet传递数组吗
- 经过修改,(初学者的作品,请多提意见。)
- java里面定义一个数组,不给定长度,可以使用吗?
- 问大家一个简单的问题!!!
不管怎样,要实例化内部类对象,必须首先实例化外部类对象x,然后以x.new InnerClass()的方式创建。