1

これは私の親クラスです

public abstract class Human {


   public Human(String name,String surname, int idno){

   }
}

そして、これはサブクラスです

public class Personel extends Human {



    public Personel(String name,String surname, int idno)
    {

    }

}

個人のコンストラクターは親クラスのものと同じである必要はありませんが、何をしてもエラーが発生します。

に追加 final regnumberpersonelます。変更することはできませんが、これを追加することはできません。

なぜ私はこれを作ることができません:

public Personel()
    {todo

    }

また

public Personel();

また

public Personel(String name,String surname, int idno,int asda, string asdsa)
    {

    }

また

public Personel(final regnum)
    {

    }

あなたが助けてくれれば、私はうれしいです。

私はそれをしました、ありがとう、しかし今私は例えばhuman1オブジェクトを作るよりもユーザーから入力を取りたいです。

私はメインクラスを持っています。オブジェクトを作成したいと思います Human human1=new human();

今何ができますか?受け付けません。

人間 human1=新しい人間(); 私は括弧を入れなければなりませんが、ユーザーから取得したいのですが、コンストラクター3パラメーターで定義したので、クラスの前にそれを行う必要がありますか?

4

6 に答える 6

2

Personelスーパークラス コンストラクターへのコンストラクター チェーンを作成する必要があります。

public Personel(String name, String surname, int idno) {
    super(name, surname, idno);
}

ここでのsuper呼び出しは、コンストラクターの連鎖です。宣言されたコンストラクターと同じパラメーターを使用する必要はありませんが、直接または同じクラスの別のコンストラクターを介して、スーパークラス コンストラクターにチェーンする必要があります。たとえば、スーパークラスのコンストラクターのパラメーターが最後のケースでどうなるかは明確regnumではありません(何らかの理由で型さえありません...)

于 2013-07-16T10:34:33.693 に答える
1

スーパークラスのコンストラクターを呼び出すのを逃したため:

public Personel(String name,String surname, int idno)
{
   super(name,surname,idno);
}
于 2013-07-16T10:35:28.577 に答える
1

あなたは作ることができます:

public Personel() {
     super("","",-1);
     ...
}
于 2013-07-16T10:36:04.310 に答える
1

パラメータを持つスーパー クラス コンストラクタを呼び出す明示的なスーパー コールを含む次のコンストラクタを追加してくださいString, String, int

public Personel(String name, String surname, int idno) {
    super(name, surname, idno);
}
于 2013-07-16T10:36:51.697 に答える
0

Oracle ドキュメントhttp://goo.gl/S8B3Aによる と、「コンストラクターがスーパークラス コンストラクターを明示的に呼び出さない場合、Java コンパイラーはスーパークラスの引数なしコンストラクターへの呼び出しを自動的に挿入します。スーパークラスに no がない場合-argument コンストラクターを使用すると、コンパイル エラーが発生します。オブジェクトにはそのようなコンストラクターがあるため、オブジェクトが唯一のスーパークラスである場合、問題はありません。"

だからあなたは電話する必要があります:

  super(name, surname, idno);

あなたの

 public Personel(String name,String surname, int idno)
于 2013-07-16T11:04:51.730 に答える
0

JLS http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.9を参照してください。

デフォルトのコンストラクターが暗黙的に宣言されているが、スーパークラスに、引数を取らず、throws 句を持たないアクセス可能なコンストラクター (§6.6) がない場合、コンパイル時エラーになります。

したがって、抽象クラスに throws 句を持たない引数コンストラクターを宣言しません。

 public abstract class Human {
    public Human(){
    }
  }

または、クラスから抽象クラスコンストラクターを呼び出します

public Personel(String name, String surname, int idno) {
    super(name, surname, idno);
}
于 2013-07-16T10:40:49.923 に答える