2016-11-10 17 views
0

同じ抽象クラスを実装している具体的なクラスのうち、デフォルトのコンストラクタしか使用できないというエラーが出ています。"抽象クラスで使用可能なデフォルトのコンストラクタがありません"

`

public abstract class Employee implements Payable 
    private String firstName; 
    private String lastName; 
    private String socialSecurityNumber; 
    private date birthdate; 

      // constructor 
      public Employee(String firstName, String lastName, 
      String social, date dob) 
      { 
      this.firstName = firstName; 
      this.lastName = lastName; 
      this.socialSecurityNumber = social; 
      //this.birthdate = getBirthdate(); 
       // Birthdate(year, month, day); 
       birthdate = dob; 
      } 



public class pieceWorker extends Employee // no default constructor available 
{ 
    private double wage; `` 
    private int pieces; 


    public void pieceWorker(String firstName, String lastName, String social,date dob, double wage, int pieces) // use some getters ? 
    { 
     super(firstName,lastName,social, dob); 
     setWage(wage); 
     setPieces(pieces); 
     this.wage = wage; 
     this.pieces = pieces; 
    } 
+1

あなたは、引数なしのコンストラクタを持たないクラスを拡張しているので、あなたが持つスーパーコンストラクタを呼び出す必要があります:あなたはあなたのコードを動作させるために次の操作を行うことができ

public class pieceWorker extends Employee // no default constructor available { private double wage; private int pieces; // compiler will insert following constructor public pieceWorker(){ super(); } public void pieceWorker(String firstName, String lastName, String social,date dob, double wage, int pieces) // use some getters ? { super(firstName,lastName,social, dob); setWage(wage); setPieces(pieces); this.wage = wage; this.pieces = pieces; } } 

正しい引数( 'super(...);') – Rogue

+2

pieceWorkerの前の 'void'を削除する必要があります。 –

+0

@CarlMastrangeloは正しいですあなたの構文です!コンストラクタは戻り値の型を必要としません。彼らは常に独自のインスタンスを返します。 – Sagar

答えて

1

あなたのコンストラクタのvoidの戻り値の型を指定しました。コンストラクタは戻り値の型を持つことができないので、コンストラクタを実際に定義していないため、このエラーが発生します。これは単なる通常のメソッドです。 dateが作成したクラスでない限り、あなたは、Dateにそれを変更することもでき、また

public pieceWorker(String firstName, String lastName, String social,Date dob, double wage, int pieces) 
    { 
     super(firstName,lastName,social, dob); 
     setWage(wage); 
     setPieces(pieces); 
     this.wage = wage; 
     this.pieces = pieces; 
    } 

:あなたはこのように、それコンストラクタ作るためにpieceWorkerにあなたの方法からvoidを削除する必要があります java.utilパッケージにあります。

2

親抽象クラスにデフォルト(または引数なし)コンストラクタがないため、サブクラスで使用されるコンストラクタを指定する必要があります。

戻り値の型voidを追加したため、サブクラスにコンストラクタが指定されていません。コードを以下のように変更してください。 (ほぼ同時に)@Gulllieと@damminaにより述べたよう

public abstract class Employee implements Payable 
    private String firstName; 
    private String lastName; 
    private String socialSecurityNumber; 
    private date birthdate; 

      // constructor 
      public Employee(String firstName, String lastName, 
      String social, date dob) 
      { 
      this.firstName = firstName; 
      this.lastName = lastName; 
      this.socialSecurityNumber = social; 
      //this.birthdate = getBirthdate(); 
       // Birthdate(year, month, day); 
       birthdate = dob; 
      } 



public class pieceWorker extends Employee // no default constructor available 
{ 
    private double wage; 
    private int pieces; 


    public pieceWorker(String firstName, String lastName, String social,date dob, double wage, int pieces) // use some getters ? 
    { 
     super(firstName,lastName,social, dob); 
     setWage(wage); 
     setPieces(pieces); 
     this.wage = wage; 
     this.pieces = pieces; 
    } 
} 
0

、クラスpieceWorkerメソッド

public void pieceWorker(args...) 

としないコンストラクタを有しています。したがって、class pieceWorkerはデフォルトコンストラクタを使用します。 任意のコンストラクタの最初の行は、super()を呼び出します。明示的にsuper()を呼び出さないと、javaがそれを行います。

public abstract class Employee implements Payable{ 
private String firstName; 
private String lastName; 
private String socialSecurityNumber; 
private date birthdate; 

     // constructor 
     public Employee(String firstName, String lastName, 
     String social, date dob) 
     { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.socialSecurityNumber = social; 
     //this.birthdate = getBirthdate(); 
      // Birthdate(year, month, day); 
      birthdate = dob; 
     } 
} 

あなたがあなた自身のコンストラクタを定義してきたように、上記の抽象クラスにデフォルトコンストラクタを持っていません。 次のようにして、pieceWorkerクラスを修正します。

public class pieceWorker extends Employee // no default constructor available 
{ 
private double wage; 
private int pieces; 

public pieceWorker(String firstName, String lastName, String social,date dob, double wage, int pieces) // use some getters ? 
{ 
    super(firstName,lastName,social, dob); 
    setWage(wage); 
    setPieces(pieces); 
    this.wage = wage; 
    this.pieces = pieces; 
} 
} 
関連する問題