Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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 - Fatal编程技术网

Java 匿名类有问题吗

Java 匿名类有问题吗,java,Java,我试图用java创建一个anon类 class myClass { int x = 10; } public class Main { public static void main(String[] args) { myClass myObject = new myClass() { public void run(){ System.out.println(x); }

我试图用java创建一个anon类

class myClass {

   int x = 10;

 }



public class Main  {
    public static void main(String[] args) {
        myClass myObject = new myClass() {

           public void run(){
               System.out.println(x);
           }
        };
        myObject.run(); //gives an error saying "method run() is undefined for the type myClass"
    }

  }
它似乎根本不起作用,它给了我一个错误,说方法run是未定义的尽管我创建了一个包含run方法的anon类,我是一个完全的java初学者,我大部分时间用javascript编写代码,javascript是我最熟悉的语言,我正在努力适应java的概念,所以对这里的很多人来说,这个问题可能看起来很愚蠢,对此我深表歉意。
这是因为编译器不知道有run方法,因为基类myClass上没有run方法

这将在Java 10+中使用var:

这是因为myObject并不完全是myClass,而是一个匿名类,它被称为containingClass$1,其中containingClass是出现此代码的类的名称

这有点奇怪,因为你不能用名字来引用这个类——只能用var

或者,在Java的早期版本中,如果您不将其分配给变量,则它可以工作:

new myClass() {

       public void run(){
           System.out.println(x);
       }
    }.run();

同样,这是有效的,因为run调用的接收者的类型是匿名类,而不是myClass;但是在Java 10之前的版本中,没有办法声明这种类型的变量。

由于编译器不知道该方法的运行,因此会发生错误

您可以通过使myClass成为接口或使用抽象方法来修复它

abstract class myClass{
    int x = 10;
    public abstract void run();
}
如果你使用

interface myClass{
    public void run();
    int x = 10;
}

它应该运行。这里的问题是在myClass声明中没有run方法

接口声明中的run原型在哪里?如果希望获得帮助,请提供完整的代码。myClass中没有定义run方法,myClass是myObject变量的类型。就像动物=新鸟;家蝇;如果Animal没有定义fly方法,即使它将在Bird类中定义,也不会编译。这是全部代码,我的问题已经在下面的答案中得到了解决,因此感谢大家。非常感谢您努力键入这个有用的答案。
interface myClass{
    public void run();
    int x = 10;
}