2016-07-28 6 views
0

Ich habe ein Produkt. Ich benutze eine vorherige Klasse, da der einzige Unterschied zwischen früher und jetzt ist, dass es die Option von 10% Rabatt (float 0.1) gibt, die mit dem Preis multipliziert werden kann, wenn die Bestellmenge 10 Einheiten überschreitet.Versuchen, Klasse mit Vererbung zu erweitern, aber immer Fehler zu erhalten

Ich habe die Product-Klasse mit DisountedProduct als geerbte Klasse erweitert, aber wenn ich den Konstruktor von der übergeordneten Klasse aufrufen, erhalte ich den Fehler "Ungültige Methodendeklaration, Rückgabetyp erforderlich."

Ich habe die Java-Erklärung der Vererbung gelesen, aber es erwähnt dies nicht.

Bitte helfen

public class DiscountedProduct extends Product { 

private float discount; 
private String name; 
private double price; 
private int quantity; 

public Product(String name, double price, int quantity){ 
    this.name = name; 
    this.price = price; 
    this.quantity = quantity; 
} 

//Get// 

public float getDiscount(){ 
    return discount; 
} 

//Set// 

public void setDiscount(float value){ 
    this.discount = value; 
} 
} 


    public class Product { 

private String name; 
private double price; 
private int quantity; 

public Product(String name, double price, int quantity){ 
    this.name = name; 
    this.price = price; 
    this.quantity = quantity; 
} 

//Get Methods// 

public String getName(){ 
    return name; 
} 

public double getPrice(){ 
    return price; 
} 

public int getQuantity(){ 
    return quantity; 
} 

public double getTotalPrice(){ 
    return quantity * price; 
} 

//Set Methods// 
public void setName(String value){ 
    this.name = value; 
} 

public void setPrice(double value){ 
    this.price = value; 
} 

public void setQuantity(int value){ 
    this.quantity = value; 
} 
} 

Antwort

6

In DiscountedProduct,

public DiscountedProduct(String name, double price, int quantity) 

Sie haben den Konstruktor für die falsche Klasse

public Product(String name, double price, int quantity) 

mit ersetzen 10 Sie müssen auch nicht alle Variablen in Ihrem DiscountedProduct Konstruktor setzen, rufen Sie einfach den Super-Konstruktor auf; ersetzen Sie das gesamte Verfahren mit

public DiscountedProduct(String name, double price, int quantity) { 
    super(name, price, quantity); 

} 
+0

behoben, wurde mit C# verwechselt – Doc

+0

Ich dachte schon;) –

+0

Danke Jungs. massive Hilfe –

0

Der Konstruktor in der Klasse DiscountedProductDiscountedProduct statt Product sein sollte.

Auch DiscountedProduct sollten die Felder nicht definieren bereits in der übergeordneten definiert, und Konstruktor sollte super(name, price, quantity) statt Initialisieren der Felder selbst nennen.

0

Ihre Produktklasse ist in Ordnung - das Problem scheint im Konstruktor Ihrer DiscountedProduct-Klasse zu liegen. Der Konstruktor für die Klasse DiscountedProduct sollte den gleichen Namen wie der Klassenname haben: DiscountedProduct. Darüber hinaus sind die Objektparameter wie name und price bereits von der übergeordneten Klasse Product definiert. Die super()-Methode ruft den Product-Klassenkonstruktor auf. Sie müssen die Methode super() aufrufen und die Werte übergeben, mit denen ein DiscountedProduct instanziiert wird.

public DiscountedProduct(String name, double price, int quantity){ 
    super(name, price, quantity); 
} 

Der feste Konstruktor sollte wie oben Block aussehen. Hatte keine Probleme damit auf meiner Maschine.

Wenn Sie die DiscountedProduct wollte einen Parameter haben, die seine Eltern Klasse nicht, man würde es in seinem Konstruktor definieren und in das entsprechende Argument übergeben, etwa so:

public DiscountedProduct(String name, double price, int quantity, float defaultDiscount){ 
     super(name, price, quantity); 
     this.discount = defaultDiscount; 
    } 
Verwandte Themen