J'ai vu cela faire plusieurs fois mais je suis un peu confus si oui ou non cela s'appelle une classe anonyme ?
public class Test {
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
System.out.println("##");
}
}.start();
}
}
La raison pour laquelle je suis confus est que les classes anonymes n'ont pas de nom, mais il est clair que nous avons déjà une classe "Thread" dans l'API Java, ce qui signifie qu'elle a un nom, et si elle a un nom alors comment peut-elle être une classe anonyme, et si ce n'est pas une classe anonyme alors qu'est-ce qu'elle est.
Je sais que c'est un peu idiot mais je ne suis pas capable de raisonner de manière déterministe car je vois des arguments valables des deux côtés.
De plus, dans la partie ci-dessus, je peux clairement remplacer l'option run
méthode de Thread
Maintenant, si je crée ma propre classe, disons MyClass
et y définir des méthodes, puis essayer de faire la même chose que ci-dessus, alors pourquoi je ne peux pas surcharger les méthodes de l'application MyClass
de cette façon, j'ai pu passer outre run
méthode de Thread
classe.
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
};
}
}