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
B
和C
所有类都不能在同一个java文件中public
。
您的java文件名必须与公共类名相同。 即这里DemoClass
是公共类,因此文件名将是DemoClass.java
Java doc入门: 开始使用java
您可以(但不建议)将类嵌套在文件中。 这完全有效。
请注意,在下面的输出中,每个连续的子句隐式调用其父级的默认构造函数( super()
)。
我建议您创建文件: A.java
, B.java
, C.java
和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(); } }
输出:
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(); } }