2015-09-30 2 views
0

Étant donné:tueur test 310-065 pour SCJP (Java)

interface TestA {String toString();} 
public class Test{ 
    public static void main(String[] args){ 
    System.out.println(new TestA()){ 
     public String toString() {return "test";} 
    } 
    } 
} 

Dans le livre, le résultat de ce code est test.But Je pense que TestA est une interface et vous ne pouvez pas créer une instance pour TestA. Quelqu'un peut-il m'expliquer cela?

+0

'Je pense que TestA est une interface et vous ne pouvez pas créer une instance pour TestA'. Correct. Semble être une faute de frappe dans le livre et devrait probablement lire 'new Test()' –

Répondre

3

nouvelle TestA() ... c'est une classe anonyme, mais il y a des fautes de frappe autour de la parenthèse, devrait se lire comme suit:

interface TestA {String toString();} 
public class Test{ 
    public static void main(String[] args){ 
    System.out.println(new TestA(){ 
     public String toString() {return "test";} 
    }); 
    } 
} 
0

Qu'est-ce que cette question est vraiment obtenir à est de savoir si oui ou non vous pouvez créer un anonyme classe interne qui implémente une interface dans une autre classe. C'est précisément ce qui se passe dans le code original ci-dessus. À l'intérieur de System.out.println() dans la méthode principale des classes de test, une classe interne anonyme est créée qui implémente la méthode toString() définie dans l'interface TestA. L'implémentation de la méthode renvoie le mot "test" en tant que chaîne. Jetez un oeil à

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

pour obtenir des précisions.