2016-05-13 6 views
0

Wenn ich eine Dynamic Array List verwenden möchte, die Klasse Worker initialisiert, kann ich Unterklassen hinzufügen, die die Worker-Klasse erweitern und versuchen, sie mit Daten wie der folgenden Testklasse zu füllen? .. wenn ich versuche, eine bestimmte Funktion aufzurufen eine der Unterklassen habe ich einen Fehler, ich muss diese Funktionen aufrufen, wie kann ich es richtig machen?Kann ich ein Unterklassenobjekt für ein Objekt vom Super-Klassen-Typ mit dynamischer Array-Liste erstellen?

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

Wir werden in der Lage sein, viel besser zu helfen, wenn Sie weitere Informationen über die tatsächlichen Fehler enthalten, und versuchen Sie den Code Formatierung ein wenig. –

+0

ja Sie können ein Laufzeitobjekt erstellen (wie es ist die einzige Stelle, die Sie verwenden möchten), aber wenn Sie es mehrere Male verwenden müssen, müssen Sie es erklären und für Fehler, müssen Sie vollständige Fehler von Ihrer Konsole – emotionlessbananas

+0

und getsalary dosen habe keine Argumente – emotionlessbananas

Antwort

1

Sie erhalten den Fehler, da die Worker Klasse keine getSalary() Methode haben.

Sie müssen die Objekte in der Liste in den entsprechenden Unterklasse-Typ umwandeln.

Zum Beispiel:

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

Problem mit folgenden Codefragment ist:

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

get kehren Sie die abstraction, die nicht die getSalary(salary) Methode hat. Alles, was Sie tun müssen, ist, jede mit der entsprechenden Implementierungsklasse zu versehen und die Methode darauf aufzurufen. Ex:

SalariedWorker sw = (SalariedWorker)Worker1.get(0); 
Verwandte Themen