Java 匿名内部类:返回匿名内部类的实例
我正在自学Java,这本书是《用Java思考第四版》 当我尝试书中的一个例子时,它给出了编译器错误Java 匿名内部类:返回匿名内部类的实例,java,inner-classes,anonymous-class,Java,Inner Classes,Anonymous Class,我正在自学Java,这本书是《用Java思考第四版》 当我尝试书中的一个例子时,它给出了编译器错误 我遗漏了什么吗?这个匿名类声明创建了一个匿名类,它是类内容的子类型 查看错误,我假设您没有在任何地方定义名为Contents的命名类。如果您已经拥有该类,则可能未正确导入。编译时,内容类需要位于编译器的类路径上。这可能意味着您正在同时编译包含它的文件;您可能需要告诉编译器在哪里可以找到已编译的类。没有进一步的细节,我们不能说。它需要导入,因为它不在同一个包中如果在使用创建匿名类之前需要定义该类,
我遗漏了什么吗?这个匿名类声明创建了一个匿名类,它是类
内容的子类型
查看错误,我假设您没有在任何地方定义名为Contents
的命名类。如果您已经拥有该类,则可能未正确导入。编译时,内容
类需要位于编译器的类路径上。这可能意味着您正在同时编译包含它的文件;您可能需要告诉编译器在哪里可以找到已编译的类。没有进一步的细节,我们不能说。它需要导入,因为它不在同一个包中如果在使用创建匿名类之前需要定义该类,那么匿名类的含义是什么class@tom您不需要“定义”基类,您可以创建一个扩展对象的匿名类。但是,基类未公开的任何方法或字段都会在编译时隐藏,因为您的类没有命名。它主要用于扩展现有接口和抽象类,以便在1个变量中使用。通过这种方式,您可以快速具体地实现。例如,研究迭代器是如何实现的。
//: innerclasses/Parcel7.java
// Returning an instance of an anonymous inner class.
public class Parcel7 {
public Contents contents() {
return new Contents() { // Insert a class definition
private int i = 11;
public int value() { return i; }
}; // Semicolon required in this case
}
public static void main(String[] args) {
Parcel7 p = new Parcel7();
Contents c = p.contents();
}
} ///:~
.\Parcel7.java:4: error: cannot find symbol
public Contents contents() {
^
location: class Parcel7
.\Parcel7.java:5: error: cannot find symbol
return new Contents() {
^
symbol: class Contents
location: class Parcel7
.\Parcel7.java:13: error: cannot find symbol
Contents c = p.contents();
^
symbol: class Contents
location: class Parcel7
3 errors
PS S:\Java Learning\001. Hello> javac .\Parcel7.java
.\Parcel7.java:2: error: cannot find symbol
public Contents contents() {
^
symbol: class Contents
location: class Parcel7
.\Parcel7.java:3: error: cannot find symbol
return new Contents() { // Insert a class definition
^
symbol: class Contents
location: class Parcel7
.\Parcel7.java:10: error: cannot find symbol
Contents c = p.contents();
^
symbol: class Contents
location: class Parcel7
3 errors