2016-05-06 7 views
0

Ich brauche auch eine überschriebene calclatefees Methode, um späte Gebühren für überfällige Filme zu berechnen.Haben Vererbung und Polymorphie Probleme mit Java

public class Action extends Movie { 

    protected double latecost; 
    protected double latefees; 

    public Action (String title, String rating, int id, int rentTime, 
      double latecost, double latefees) { 

     super(title, rating, id, rentTime); 
     this.title = title; 
     this.rating= rating; 
     this.id = id; 
     this.rentTime= 8; 
     this.latecost = 2; 

     System.out.println("Overridden " + title + rating + " " + id + " " 
       + latecost + " " + latefees); 
    } 
    public double calclatefees (double latecost) { 

     if (rentTime > 3) 
      latefees = ((rentTime - 3) * latecost); 
     return latefees;} 

    @Override 
    public String toString() { 
    String x = "Movie: " + title + " is rated " + rating + "\nMovie ID   number:" 
      + id + " late fees are $" + latefees; 
    return x; 
    } 
    }  
+1

Einige Ausgabe wäre hilfreich. – rmlan

+0

Abgesehen von dem Problem, das Sie haben, überlegen Action, Comedy und Drama zu einem Enumerator, sind die besseren Eigenschaften eines Films anstelle von vererbten Filmen ... :) –

+0

Ich versuche zu sehen, warum meine toString nicht zurücksendet Meine Werte stelle ich in meinen überladenen Konstruktor und warum werden sie es immer noch nicht, wenn ich sie in meinem Super abstecke. – sjames14

Antwort

0

Derzeit wird dieser Druck:

overloaded - not overridden NR 00 
overridden 

Welche perfekt. Es zeigt, dass Konstruktoren speziell behandelt werden. Sie alle rufen zuerst den übergeordneten Konstruktor auf.

Sie deshalb den Konstruktor der Movie Druck überlastet zu sehen - nicht NR überschrieben 00, dann den Konstruktor von Action Tritte in und Drucke überschrieben.

0

Sie müssen das Schlüsselwort this verwenden. Ich glaube, wenn Sie das nicht tun und Sie die gleichen Namen im Konstruktor verwenden, wird nichts zugewiesen. Sie sagen dem Titel innerhalb des Parameters zu, was auch immer Sie ihm zuweisen, was im folgenden Beispiel "nicht überschrieben" ist.

zum Beispiel

public Movie(String title, String racing, int id, int rentTime){ 
    this.title = " not overridden "; 
    // probably should be something like this.title = title after debugging. 
    //etc... 
} 

Das Schlüsselwort this bezieht sich auf die Datenelemente des aktuellen Objekts, so this.title würde der Film den Titel, nicht der Parameter Mitglied Titel.

Sie müssen dies auch mit Ihren oben genannten Methoden tun.

public void rating (String rating) {this.rating = rating;} 

edit: versuchen Sie dies für Konstruktor

public Movie(String title, String rating, int id, int rentTime){ 
    this.title = " not overridden "; 
    this.rating = " NR "; 
    this.id = 0; 
    this.rentTime = 0; 
    System.out.println(" overloaded -" + title + rating + id + rentTime); 
} 

, nachdem Sie sehen die Ausgabe, wenn Sie die aktuellen Werte anzeigen möchten Sie in die anderen Kind-Klassen sind vorbei, müssen Sie es so weit ändern :

public Movie(String title, String rating, int id, int rentTime){ 
    this.title = title; 
    this.rating = rating; 
    this.id = id; 
    this.rentTime = rentTime; 
    System.out.println(" overloaded -" + title + rating + id + rentTime); 
} 
+0

Kann ich meine Kind-Klasse toStrings bekommen, um die Werte von meiner Array-Hauptmethode zu drucken? – sjames14

+0

Ja, aber im Moment haben Sie keine Werte zum Drucken. Zeigt Ihre toString-Methode gerade etwas an? Vielleicht nur die Strings-Literale, die du eingibst? Stellen Sie außerdem sicher, dass Sie über der toString-Methode die Annotation @Override haben – Orin

+0

Ich habe das @Override, aber wie zeige ich mehr als nur die Literale an? – sjames14