Java错误:期望的类,接口或枚举

我需要知道这段代码的输出。 但它不起作用。 也许代码错了。 我还在学习如何使用Java,我尝试了几个小时,但仍然没有运气。

这是代码:

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(); } 

谁能告诉我代码中有什么问题或遗漏?

例如:

 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"); } } } 

另请注意,这可能无法打印您所期望的内容。 它实际上会打印:

 A B C 

为什么? 构造函数总是链接到超级类。

把你的main方法放在一个类中。

 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(); } } 

这里的另一点是,你可以在一个文件中只有公共类,所以你的A BC所有类都不能在同一个java文件中public

您的java文件名必须与公共类名相同。 即这里DemoClass是公共类,因此文件名将是DemoClass.java

Java doc入门: 开始使用java

您可以(但不建议)将类嵌套在文件中。 这完全有效。

请注意,在下面的输出中,每个连续的子句隐式调用其父级的默认构造函数( super() )。

我建议您创建文件: A.javaB.javaC.javaInheritenceTest.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(); } } 

输出:

 A A B A B C 

警告:1个java文件中不应有超过1个公共类,不推荐使用。 但是,如果您不使用“公共”标识符(或使用静态或在另一个类中),它仍然可以工作。 但对于初学者,我建议你将它们全部放在不同的文件中。

错误:您的main方法不属于任何类。 我建议你创建另一个包含public static void main方法的类来测试你的应用程序。

信息:继续关注inheritance,因​​为您的打印可能不是您所期望的。 (B类的构造函数调用A的构造函数,类C的构造函数调用构造函数B,而构造函数B又调用A的构造函数)。

这就是你得到的原因

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

在您的情况下,我会尝试以下方法:

 //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(); } }