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

时间:2014-02-11 10:42:59

标签: java compiler-errors javac

我需要知道此代码的输出。但它不起作用。也许代码错了。 我还在学习如何使用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();  
}

有人能告诉我代码中有什么问题或缺失吗?

4 个答案:

答案 0 :(得分:5)

将主要方法放在课堂上。

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文档:getting started with java

答案 1 :(得分:2)

例如:

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

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

答案 2 :(得分:0)

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

请注意,在下面的输出中,每个连续的子句隐式调用其父级的默认构造函数(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

答案 3 :(得分:0)

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

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

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

这就是你得到的原因

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.

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

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