gpt4 book ai didi

java - 这个实现会被称为匿名类吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:21:51 25 4
gpt4 key购买 nike

我已经看过很多次这样做了,但我有点困惑这是否会被称为匿名类?

public class Test {
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
System.out.println("##");
}
}.start();
}
}

我感到困惑的原因是因为匿名类没有名称,但这显然我们在 Java API 中已经有一个“Thread”类,所以这意味着它有一个名称,如果它有名称那么它怎么能是一个匿名类,如果它不是匿名类那么它是什么。

我知道这有点傻,但我无法确定自己的论据,因为我看到双方都有有效的论据。

此外,在上面我可以清楚地覆盖 Thread 类的 run 方法,现在如果我创建自己的类,比如说 MyClass,在其中定义一些方法然后尝试做与上面相同的事情然后为什么我不能覆盖 MyClass 的方法,他们这样我能够覆盖 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
};
}
}

最佳答案

  1. 是的,您的第一个类是匿名的,因为它是内联的并且从 Thread 扩展而来。它与您的 Thread 类不同。
  2. 关于MyClass:当然你不能扩展私有(private)方法。这与匿名类无关,是基本的 Java 继承规则。公开它们,您可以内联扩展它们。

澄清一下,如果你有一个有名字的嵌套类,你可以声明一个它类型的变量:

public class Test {

private static class MyThread extends Thread {
@Override
public void run() {
System.out.println("Foo");
}
}

public static void main(String[] args) {
MyThread myThread = new MyThread();
}
}

但是如果你有一个匿名类,你就不能这样做:

public static void main(String[] args) {
new Thread(){
@Override
public void run() {
System.out.println("##");
}
}.start();


// how can you declare a variable of the above type *with* its behavior?
}

旁白:您几乎应该永远不要扩展 Thread,而是实现 Runnable,或者更好的是,使用执行器来帮助您进行线程处理。


回复:

Ok, thanks for your reply, correct me on my understanding - using anonymous class I can create a brand new class (basically implementation of an interface) at runtime, also I can extend an existing class and that would still be called as "anonymous class"?

是的,您确实创建了一个全新的类,但您不一定要实现接口(interface)。实际上,您上面的示例与接口(interface)没有直接关系,而与扩展现存的具体类有关。您可以并且经常创建实现接口(interface)的匿名类,Runnable 是一个常见示例,但您上面的示例不是“接口(interface)的基本实现”。

关于java - 这个实现会被称为匿名类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43689236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com