Java error: class, interface, or enum expected

梦想的初衷 提交于 2019-12-18 08:56:10

问题


I need to know the output of this code. But it's not working. Maybe the code is wrong. I'm still learning how to use Java, and I tried fixing this for hours but still no luck.

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

Can anyone tell me what is wrong or missing in the code?


回答1:


For example:

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

Also note that this might not print what you would expect. It would actually print:

A
B
C

Why? Constructors are always chained to the super class.




回答2:


Put your main method in a class.

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

Another point here is, you can have only public class in a file, so your A B and C all class can't be public in same java file.

Your java file name must be same as public class name. i.e. here DemoClass is public class so file name will be DemoClass.java

Java doc for getting started : getting started with java




回答3:


You can, but it is not recommended, nest your classes in a file. It is perfectly valid.

Notice in the output below that each successive child calls its parent's default constructor (super()) implicitly.

I recommend you create the files: A.java, B.java, C.java, and 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();
    }
}

Output:

A
A
B
A
B
C



回答4:


Warning: You shouldn't have more than 1 public classes in 1 java file, not recommended. However, it could still work if you didn't use the 'public' identifier (or by using static or inside another class). But for a starter, I would recommend you to have them all in separate files.

Error: Your main method does not belong to any class. I propose you create another class that includes the public static void main method to test your application.

Info: keep a look at inheritance as your printings might not be what you expect. (Constructor of class B calls the constructor of A, and constructor of class C calls the constructor B which in turn calls the constructor of A).

That's why you get

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.

In your case, I would try the following:

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


来源:https://stackoverflow.com/questions/21699574/java-error-class-interface-or-enum-expected

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!