web-dev-qa-db-ja.com

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

誰かがコードのどこが間違っているか、何が欠けているか教えてもらえますか?

3
Z9z9z9

例えば:

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
nablex

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

ここでのもう1つのポイントは、ファイルにはパブリッククラスしか含めることができないため、ABCのすべてのクラスを同じpublicにすることはできないということです。 Javaファイル。

Javaファイル名はパブリッククラス名と同じである必要があります。つまり、ここではDemoClassはパブリッククラスであるため、ファイル名はDemoClass.Javaになります。

開始するためのJavaドキュメント: Javaを開始する

5
Not a bug

クラスをファイルにネストすることはできますが、お勧めしません。それは完全に有効です。

以下の出力では、連続する各子が親のデフォルトコンストラクター(super())を暗黙的に呼び出すことに注意してください。

ファイルを作成することをお勧めします:A.JavaB.JavaC.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
0
Mr. Polywhirl

警告:1つのJavaファイル、推奨されません。ただし、「public」識別子を使用しなかった場合(またはを使用した場合)でも機能する可能性があります。静的または別のクラス内)。ただし、初心者の場合は、すべてを別々のファイルに入れることをお勧めします。

エラー:メインメソッドはどのクラスにも属していません。アプリケーションをテストするために、public static voidmainメソッドを含む別のクラスを作成することをお勧めします。

情報:あなたの印刷はあなたが期待するものではないかもしれないので、継承を見てください。 (クラスBのコンストラクターはAのコンストラクターを呼び出し、クラスCのコンストラクターはコンストラクターBを呼び出し、コンストラクター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();  
   }
}
0
Kostas Chalkias