【发布时间】:2017-09-27 02:31:51
【问题描述】:
我已经看过很多次了,但我有点困惑这是否会被称为匿名类?
public class Test {
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
System.out.println("##");
}
}.start();
}
}
我感到困惑的原因是因为匿名类没有名称,但这显然我们已经在 Java API 中有一个“线程”类,所以这意味着它有一个名称,如果它有一个名称那么它怎么能是一个匿名类,如果它不是一个匿名类,那么它是什么。
我知道这有点傻,但我无法确定性地推理自己,因为我看到双方都有有效的论据。
另外,在上面我可以清楚地覆盖Thread 类的run 方法,现在如果我创建自己的类,比如说MyClass,在其中定义一些方法,然后尝试做与上面相同的事情为什么我不能覆盖 MyClass 的方法,它们是我能够覆盖 Thread 类的 run 方法的方式。
public class MyClass {
private void myMethod1() {
}
private void myMethod2() {
}
}
public class Test {
public static void main(String[] args) {
new MyClass(){
// why I cannot override "myMethod1" and "myMethod1" of `MyClass`, they way I was able to override `run` method of `Thread` class
};
}
}
【问题讨论】:
-
是的,它是匿名的。它是一个扩展线程的类,所以它没有名字。
-
您的第二个问题(并且您的问题不应包含一个以上的真实问题)不清楚。你谈论 MyClass——但你没有表现出来!您要覆盖哪些方法?它甚至有
public void start()方法吗?请澄清。 -
@HovercraftFullOfEels 这就是我真的搞砸了并且无法推理的地方,如果已经有一个类并且这只是类的扩展,那么它是如何“匿名类”的?另外,关于覆盖方法的第二个问题呢?
-
它是 NOT Thread 类。它是从 Thread 扩展而来的类。除了内联变量之外,您不能创建此类的变量。
-
MyClass 没有启动方法,因此您的代码没有意义。
标签: java inner-classes anonymous-class anonymous-inner-class