このコードの出力を知る必要があります。しかし、それは機能していません。たぶんコードが間違っています。私はまだ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();
}
}
ここでのもう1つのポイントは、ファイルにはパブリッククラスしか含めることができないため、A
B
とC
のすべてのクラスを同じpublic
にすることはできないということです。 Javaファイル。
Javaファイル名はパブリッククラス名と同じである必要があります。つまり、ここではDemoClass
はパブリッククラスであるため、ファイル名はDemoClass.Java
になります。
開始するためのJavaドキュメント: 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ファイル、推奨されません。ただし、「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();
}
}