Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 匿名内部类:返回匿名内部类的实例_Java_Inner Classes_Anonymous Class - Fatal编程技术网

Java 匿名内部类:返回匿名内部类的实例

Java 匿名内部类:返回匿名内部类的实例,java,inner-classes,anonymous-class,Java,Inner Classes,Anonymous Class,我正在自学Java,这本书是《用Java思考第四版》 当我尝试书中的一个例子时,它给出了编译器错误 我遗漏了什么吗?这个匿名类声明创建了一个匿名类,它是类内容的子类型 查看错误,我假设您没有在任何地方定义名为Contents的命名类。如果您已经拥有该类,则可能未正确导入。编译时,内容类需要位于编译器的类路径上。这可能意味着您正在同时编译包含它的文件;您可能需要告诉编译器在哪里可以找到已编译的类。没有进一步的细节,我们不能说。它需要导入,因为它不在同一个包中如果在使用创建匿名类之前需要定义该类,

我正在自学Java,这本书是《用Java思考第四版》

当我尝试书中的一个例子时,它给出了编译器错误


我遗漏了什么吗?

这个匿名类声明创建了一个匿名类,它是类
内容的子类型


查看错误,我假设您没有在任何地方定义名为
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