Java 匿名类有问题吗
我试图用java创建一个anon类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); }
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;
}