2016-05-29 4 views
-1

私はJava(とOOP)を学んでいて、なぜ私のクラスが期待どおりに動作していないのか理解できません。私はスーパークラス 'MyFirstJavaClass'とMyFirstJavaClassを拡張するサブクラス 'Test'を持っています。 MyFirstJavaClassには、パブリックアクセスが指定された3つのメンバ変数があります。それらはint x、y、zです。 MyFirstJavaClass内の唯一のコンストラクタは、メンバ変数を初期化するために3つの引数をとります。また、サブクラスTestは、継承されたメンバ(x、y、z)とそれが定義する1つのmeber変数(int固有)を初期化する3つの引数を取るコンストラクタも実装します。ここでは、コードは次のとおりです。スーパークラスコンストラクタ内のすべての文が実行されないのはなぜですか?

MyFirstJavaClass:

class MyFirstJavaClass { 

    int x, y, z; 

    MyFirstJavaClass(int a, int b, int c) { 
    System.out.println("Hey! I am the superclass constructor"); 

    x = a; 
    y = b; 
    z = c; 
    } 

    public static void main(String args[]) { 
    Test t = new Test(12, 25, 37); 
} 

} 

テスト:私を混乱させる

class Test extends MyFirstJavaClass { 
int specific; 

Test(int a, int b, int c) 
{ 
    super(a, b, c); 
    System.out.println("Hey! I am the subclass constructor"); 
    specific = 79; 
} 
} 

シングは、MyFirstJavaClassコンストラクタで出力文が実行されていないということです。指定された値に、私はそれが継承されている変数を初期化するため、スーパークラスのコンストラクタが呼び出されると確信してい

Hey! I am the subclass constructor 

:私のような何かを出力することを期待:

Hey! I am the superclass constructor 
Hey! I am the subclass constructor 

しかし、私が得ることですTestオブジェクトを作成します。なぜ出力文が実行されなかったのですか?

携帯電話でこの質問を入力しているため、コンパイル時にエラーが発生することがあります。私の元のクラスには何の誤りもないと確信しています。

+0

実行したコードに実際に2つのprint文があることは確かですか?また、あなたが私たちに示したprintステートメントの両方がスーパークラスのコンストラクタを参照していることにも気づいていますか? –

+0

申し訳ありませんキーボードのヒントは私を混乱させる。質問が編集されました。 –

+0

パッケージおよびその他のコンストラクタと展開プロセスの再確認。また、デバッガを使用して、ステップごとに追跡することができます。 – Leo

答えて

0

コメントの中で、あなたの問題はコーディング自体に起因するものではないことが示されています。あなたの「予想される」標準出力の結果は、何が起こるのかに関して正しいものです。最初のprint文はどこか/何とか失われています。ほとんどの場合、クラスを適切に一緒にパッケージ化していない可能性があります。

投稿したコードと実行中のコードの間に切断があります。パッケージが動作していない理由を調べるのはあなた次第です。 (a)は、クリーン/(b)は、デバッガでステップスルーの再構築と

  • フルをやっ

    • :あなたがすることから始めるかもしれません。コードが実行されている理由(b)にあなたが表示されますと

    は、あなたが、私は問題はあなたがテストクラスのオブジェクトを作っているかと思い

  • +0

    私のIDEは私にとってそれをしていると思います。または私は何かを逃していますか?記述してください。 –

    +0

    あなたはIDEで使っていたことをOPで言及していませんでした。私はこの点についてさらに答えて答えを更新しました。 – javadba

    0

    を期待したものではなかったです。 ファーストクラスからmain()を削除してください。

    クラスを拡張しない第3のクラスを作成します。

    そのクラスでmain()メソッドを作成し、そのメソッドでTestクラスのオブジェクトを作成します。

    コードを実行します。

    希望します。

    -1

    私のEclipse IDEでコードを実行しようとしました。コードは正常に動作し、表示されます。

    Hey! I am the superclass constructor 
    Hey! I am the subclass constructor 
    

    ロジックは問題ありません。あなたのクラスに正しいパッケージ名を与えていることを確認してください。

    -1

    あなたのコードは自分の望むようにIDEで実行されます。コードに問題はありません。

    関連する問題