2016-04-13 20 views
1

zurückruft, also muss ich eine Klasse erstellen, die eine abstrakte Klasse erweitert und den Typ der Hausaufgaben und die Seiten auflistet, die verwendet werden. Allerdings verstehe ich nicht vollständig, wie ich zu den gelesenen Seiten und der Art der Hausaufgaben zurückrufe, während ich auch eine createAssignment korrekt benutze. Dies ist, was ich bisher habe, aber es scheint nicht zu funktionieren. Jede Hilfe wird geschätzt.Wie man zu einer abstrakten Klasse von der Erweiterung

public abstract class Homework 
{ 
    public abstract int pagesRead(); 
    public abstract String typeHomework(); 
    public abstract void createAssignment(int p); 
} 

public class MyMath extends Homework 
{ 
    public abstract void createAssignment(int p, String t) 
    { 
     p = 5; 
     t = "Math"; 
    } 

} 
+0

Java ist Groß- und Kleinschreibung Versuchen Sie, den abstrakten Klassennamen in demselben Fall –

+0

zu machen Sie sollten zuerst "abstract" aus der Methodensignatur in MyMath entfernen. – NAIT

+0

Dieser Code kompiliert nicht, werfen Sie einen Blick auf die Methodensignatur von '' createAssignment''. Es überschreibt auch nicht den in der Oberklasse (2 Parameter). Außerdem: Alle Methoden in der Oberklasse sind abstrakt, also müssen Sie alle in der Unterklasse implementieren. – f1sh

Antwort

0

Es ist ziemlich einfach Kumpel:

Zunächst müssen Sie die abstrakten Methoden implementieren:

public class MyMath extends Homework { 
    public int pagesRead(){ 
     return 3; // any number that you want 
    } 

    public String typeHomework(){ 
     return "My math homework"; // any text for the homework 
    } 

    public void createAssignment(int p){ 
     // do anything with p 
    } 
} 

Wie kann ich sehen, ich denke, dass Sie eine Methode zu verwenden versuchen, das Feld populte Werte:

public class MyMath extends Homework { 

    private int p; 
    private String homeworkContent; 

    public int pagesRead(){ 
     return p; 
    } 

    public String typeHomework(){ 
     return homeworkContent; // any text for the homework 
    } 

    public void createAssignment(int p, String homeworkContent){ 
     this.p = p; 
     this.homeworkContent = homeworkContent; 
    } 
} 

Aber bedenken Sie, dass Sie die Methode von Hausaufgaben ändern sollte:

public abstract void createAssignment(int p, String homeworkContent); 
1

Ihr Code mit Syntax-Fixes umformatiert:

public abstract class Homework 
{ 
    public abstract int pagesRead(); 
    public abstract String typeHomework(); 
    public abstract void createAssignment(int p, String t); 
} 

public class MyMath extends Homework 
{ 
    public void createAssignment(int p, String t) 
    { 
     p = 5; 
     t = "Math"; 
    } 
} 

Sie werden auch die beiden anderen abstrakten Methoden zu implementieren.

Und es macht keinen Sinn, den Argumenten der Methode zuzuweisen :-) Ich schätze, Sie möchten sie Variablen in der MyMath Instanz zuweisen.

Ich habe es nicht getestet. Hilft es?

+0

Ja! Ich habe es gerade herausgefunden und eine eigene Antwort gepostet, die sehr ähnlich zu deiner ist, als du sie gepostet hast. Danke für die Hilfe. –

0

Ich habe beide Programme bearbeitet, indem ich eine von ihnen gemacht habe, die nur abstrakt funktionierte, also sind sie beide abstrakt und createAssignment ist jetzt ungültig. Das funktioniert jetzt. Danke für die Formatierungszeiger Jungs.

public abstract class Homework 
{ 
public abstract int pagesRead(); 
public abstract String typeHomework(); 
public abstract void createAssignment(int p); 

}

public abstract class MyMath extends Homework 
{ 
public void createAssignment(int p, String t) 
{ 
    p = 5; 
    t = "Math"; 
} 

}

+1

Die Signatur für 'createAssignment' stimmt nicht überein. – totoro

+0

Es funktioniert nur, weil Sie '' MyMath'' auch abstrakt gemacht haben. Sie überschreiben keine Methode, nicht einmal "createAssignment". – f1sh

1

Sie klar verstehen, nicht das Konzept der abstrakten Ihre letzte Frage und dieses unter Berücksichtigung. Wenn Sie public abstract void createAssignment(int p); auf Ihrer Homework Klasse definierten, sagten Sie "irgendeine konkrete Klasse (lesen nicht abstrakt), die diese Klasse erweitert, sollte diese Methode implementieren", aber auf der konkreten Klasse versuchen Sie wieder, die gleiche Methode zu implementieren, die abstract Schlüsselwort, nur mit einer anderen Signatur, die falsch ist.

Entweder das abstract Stichwort entfernen und die Signatur ändern:

public void createAssignment(int p, String t) { 
    p = 5; 
    t = "Math"; 
    } 

Oder implementieren, um die abstrakte Methode:

@Override 
    public void createAssignment(int p) { 

    } 

Beachten Sie aber, dass Sie Sie alle abstrakten Methoden implementieren müssen definiert in Homework, es sei denn, Sie machen MyMath auch abstrakt. Dies zählt die Implementierung von createAssignment(int p) "erneut", wenn Sie es nur überlasten.

Verwandte Themen