web-dev-qa-db-fra.com

Erreur Java: classe, interface ou enum attendue

J'ai besoin de connaître la sortie de ce code. Mais ça ne marche pas. Le code est peut-être erroné. J'apprends toujours à utiliser Java et j'ai essayé de résoudre ce problème pendant des heures, mais toujours pas de chance. 

Voici le code:

public class A 
{ 
    public A() 
    {
        System.out.println ("A");
    }
}
public class B extends A 
{
    public B() 
    {
        System.out.println ("B");
    }
}
public class C extends B 
{ 
    public C() 
    {
        System.out.println ("C");
    }
}

public static void main(String args[]) {

    A a = new A();  
    B b = new B();  
    C c = new C();  
}

Quelqu'un peut-il me dire ce qui ne va pas ou ce qui manque dans le code?

3
Z9z9z9

Par exemple: 

public class Example {

    public static void main(String...args) {
        new C();
    }

    public static class A {
        public A() {
            System.out.println("A");
        }
    }
    public static class B extends A {
        public B() {
            System.out.println("B");
        }
    }
    public static class C extends B {
        public C() {
            System.out.println("C");
        }
    }
}

Notez également que cela pourrait ne pas imprimer ce que vous attendez. Il serait en fait imprimer:

A
B
C

Pourquoi? Les constructeurs sont toujours chaînés à la super classe.

2
nablex

Mettez votre méthode principale dans une classe.

Filename : DemoClass.Java

class A 
{ 
    public A() 
    {
        System.out.println ("A");
    }
}
class B extends A 
{
    public B() 
    {
        System.out.println ("B");
    }
}
class C extends B 
{ 
    public C() 
    {
        System.out.println ("C");
    }
}

public class DemoClass {

   public static void main(String args[]) {

       A a = new A();  
       B b = new B();  
       C c = new C();  
   }
}

Un autre point ici est que vous ne pouvez avoir qu'une classe publique dans un fichier. Par conséquent, votre AB et C toute classe ne peut pas être public dans le même fichier Java.

Votre nom de fichier Java doit être identique au nom de la classe publique. i.e. here DemoClass est une classe publique et le nom du fichier sera donc DemoClass.Java

Document Java pour démarrer: démarrer avec Java

5
Not a bug

Vous pouvez, mais cela n'est pas recommandé, imbriquer vos classes dans un fichier. C'est parfaitement valide.

Notez dans la sortie ci-dessous que chaque enfant successif appelle de manière implicite le constructeur par défaut de son parent (super()).

Je vous recommande de créer les fichiers: A.Java, B.Java, C.Java et InheritenceTest.Java.

public class InheritenceTest {
    public class A {
        public A() {
            System.out.println("A");
        }
    }

    public class B extends A {
        public B() {
            System.out.println("B");
        }
    }

    public class C extends B {
        public C() {
            System.out.println("C");
        }
    }

    public static void main(String args[]) {
        InheritenceTest i = new InheritenceTest();
        A a = i.new A();
        B b = i.new B();
        C c = i.new C();
    }
}

Sortie:

A
A
B
A
B
C
0
Mr. Polywhirl

Avertissement: Vous ne devriez pas avoir plus de 1 classe publique dans 1 fichier Java, ce qui n'est pas recommandé. Cependant, cela pourrait toujours fonctionner si vous n'utilisiez pas l'identifiant 'public' (ou si vous utilisiez static ou dans une autre classe). Mais pour commencer, je vous recommanderais de les avoir tous dans des fichiers séparés.

Erreur: Votre méthode principale n'appartient à aucune classe. Je vous propose de créer une autre classe qui inclut la méthode principale publique statique statique pour tester votre application.

Info: gardez un œil sur l'héritage, car vos impressions pourraient ne pas correspondre à vos attentes. (Le constructeur de la classe B appelle le constructeur de A et le constructeur de la classe C appelle le constructeur B, qui à son tour appelle le constructeur de A).

C'est pourquoi tu as

A
A  
B
A
B
C

*due to A() it prints A, then due to B() it prints A B and finally due to C() it prints A B C.

Dans votre cas, je voudrais essayer ce qui suit:

//Filename: A.Java
public class A { 
    public A() {
        System.out.println ("A");
    }
}

//Filename: B.Java
public class B extends A { 
    public B() {
        System.out.println ("B");
    }
}

//Filename: C.Java
public class C extends B { 
    public C() {
        System.out.println ("C");
    }
}

//Filename: Test.Java
//use a Test class for testing
public class Test {
   public static void main(String args[]) {
       A a = new A();  
       B b = new B();  
       C c = new C();  
   }
}
0
Konstantinos Chalkias