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?
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.
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 A
B
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
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
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();
}
}