为什么匿名内部类的 Java 中 human.x=10 和 human.test(0) 编译错误?

Dil*_*iya -1 java oop compiler-errors class anonymous-class

class Human {

    void eat() {
        System.out.println("human eat!");
    }
}

public class Demo {

    public static void main(String[] args) {
        Human human = new Human() {
            int x = 10;

            public void test() {
                System.out.println("test - anonymous");
            }

            @Override
            void eat() {
                System.out.println("customer eat!");
            }

        };

        human.eat();
        human.x = 10;   //Illegal
        human.test();   //Illegal
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码为什么会human.x=10;出现human.test(0);编译错误?

Joa*_*uer 6

该类型Human没有字段x或方法test(),并且您的变量human被定义为该类型。

您的匿名内部类具有该字段和该方法,因此您需要将变量定义为该类型。但“匿名”意味着它没有名称,因此您不能仅用Human不存在的名称进行替换。

但是,如果您使用var局部变量类型推断,将为该变量提供该匿名类的类型,因此替换Human human = ...var human = 将使您的代码编译。

  • @DilshanDekumpitiya:如果您阅读答案,那么您会发现最后一句包含非常明确的说明,说明代码中需要更改哪些内容。除此之外:不,我更喜欢提供理解,而不是分发代码让人们盲目地复制。 (4认同)