2016-05-13 8 views
0

私はクラスを初期化しているダイナミック・アレイ・リストを使用したい場合、Workerクラスを拡張するサブクラスを追加し、次のテスト・クラスのようなデータでそれらを埋めることができますか?サブクラスの1つにエラーが発生しました。これらの関数を呼び出す必要があります。どうすれば正しく実行できますか?ダイナミックArray Listスーパークラス型オブジェクトのサブクラスオブジェクトを作成できますか?

public class Worker extends Person { 
     private int id; 

     Worker() { 
     } 

     Worker(int i) { 
      id = i; 
     } 

     public int getId() { 
      return id; 
     } 

     public void setId(int id) { 
      this.id = id; 
     } 

     public String toString() { 
      return super.toString() + "ID: " + id + " "; 
     } 
    } 


    public class HourlyWorker extends Worker implements Annual { 
     private double rate; 
     private double AnnualPayment; 
     private double percentageIncrease; 

     HourlyWorker() { 
     } 

     HourlyWorker(double r) { 
      rate = r; 
     } 

     public double getAnnualPay(double Annualpayment) { 
      return Annualpayment = rate * 52 * 40; 
     } 

     public double getRate() { 
      return rate; 
     } 

     public void setRate(double rate) { 
      this.rate = rate; 
     } 

     public double getAnnualPayment() { 
      return AnnualPayment; 
     } 

     public void setAnnualPayment(double AnnualPayment) { 
      this.AnnualPayment = AnnualPayment; 
     } 

     public double getpercentageIncrease() { 
      return percentageIncrease; 
     } 

     public void setpercentageIncrease(double percentageIncrease) { 
      this.percentageIncrease = percentageIncrease; 
     } 


     public void increasePayment(double r) { 
      increasePayR(r); 
     } 

     public double increasePayR(double r) { 
      return rate = (AnnualPayment + getAnnualPay(r) * percentageIncrease)/2080; 
     } 

     public String toString() { 
      return "Your rate : " + rate + " "; 
     } 
    } 


    public class SalariedWorker extends Worker implements Annual { 
     private double salary; 
     private double AnnualPayment; 
     private double percentageIncrease; 

     SalariedWorker() { 
     } 

     SalariedWorker(double s) { 
      salary = s; 
     } 

     public double getAnnualPay(double Annualpayment) { 
      return Annualpayment = salary * 12; 
     } 

     public void increasePayment(double r) { 
      increasePayS(r); 
     } 

     public double increasePayS(double r) { 
      return salary = (AnnualPayment + getAnnualPay(r) * percentageIncrease)/12; 
     } 

     public double getSalary() { 
      return salary; 
     } 

     public void setSalary(double salary) { 
      this.salary = salary; 
     } 

     public double getAnnualPayment() { 
      return AnnualPayment; 
     } 

     public void setAnnualPayment(double AnnualPayment) { 
      this.AnnualPayment = AnnualPayment; 
     } 

     public double getpercentageIncrease() { 
      return percentageIncrease; 
     } 

     public void setpercentageIncrease(double percentageIncrease) { 
      this.percentageIncrease = percentageIncrease; 
     } 

     public String toString() { 
      return " "; 
     } 
    } 


    public class Test { 

     public static void main(String[] args) { 
      Scanner prompt = new Scanner(System.in); 
      ArrayList<Worker> Worker1 = new ArrayList<Worker>(); 

      Worker1.add(new SalariedWorker());// is it alright to create a subclass object here? 
      Worker1.add(new SalariedWorker(1000.0));// index 1 
      Worker1.add(new HourlyWorker());// index 2 
      Worker1.add(new HourlyWorker(100.0));// index 3 

      System.out.println("Enter your monthly salary: "); 
      double salary = prompt.nextDouble(); 
      Worker1.get(0).getSalary(salary);//gets me an error 
      System.out.println("Enter your hourly rate: "); 
      double HourlyRate = prompt.nextDouble(); 

      System.out.println("Enter the Percentage Increase for a Salaried worker: "); 
      double PercentIncreaseS = prompt.nextDouble(); 
      Worker1.get(0).getpercentageIncrease(PercentIncreaseS);//gets me an error 
      System.out.println("Your Increased payment is: "); 
      System.out.println("Enter the Percentage Increase for an Hourly worker: "); 
      double PercentIncreaseH = prompt.nextDouble(); 
     } 
    } 
+0

私たちは、あなたが実際のエラーの詳細が含まれている場合に多くの方に役立つ、とあなたのコードを少し書式設定しようとすることができるでしょう。 –

+0

はい実行時オブジェクトを作成することができます(使用したい唯一の場所など)。複数回使用する必要がある場合は、宣言する必要があります。エラーの場合は、コンソールから完全なエラーを入力する必要があります。 – emotionlessbananas

+0

とgetsalary dosen引数がありません – emotionlessbananas

答えて

1

WorkerクラスがgetSalary()メソッドを持っていないので、あなたは、エラーを取得しています。

リスト内のオブジェクトを適切なサブクラスタイプにキャストする必要があります。例えば

:以下のコードの断片と

SalariedWorker sw = (SalariedWorker) Worker1.get(0); 
sw.getSalary(salary); 
0

問題は次のとおりです。

ArrayList<Worker> Worker1 = new ArrayList<Worker>(); 
Worker1.get(0).getSalary(salary); 

GETはあなたにgetSalary(salary)メソッドを持っていませんabstractionを返します。それぞれの実装クラスでそれぞれをキャストし、メソッドを呼び出すだけです。 例:

SalariedWorker sw = (SalariedWorker)Worker1.get(0); 
関連する問題