2017-08-18 2 views
0

J'essaie de faire un projet d'école dans lequel j'écris une application qui traite des livres, des collections de livres (nous appellerons cela une bibliothèque), et le client d'interface utilisateur pour ces classes. L'une des classes est une classe appelée Citable qui nécessite l'implémentation de fonctionnalités d'accès typiques qui renvoient l'ISBN, l'auteur, le titre et l'éditeur d'un livre (toutes les chaînes) ainsi que l'année de publication, le mois et le jour (tous entiers) et un nombre de pages (un nombre entier).Erreur: Book n'est pas abstrait et ne remplace pas la méthode abstraite getPageCount dans Citable. Dois-je faire un résumé de cours en raison de la classe d'interface?

La classe suivante une classe Book qui implémente l'interface Citable. La bibliothèque devra trier les livres en fonction de leur numéro ISBN. Dans Book, vous devrez fournir un support pour cela (indice: ceci nécessite la mise en place d'une interface supplémentaire (que vous n'avez pas à écrire, juste implémenter) et l'écriture d'une méthode supplémentaire (qui ne devrait avoir besoin que d'une ligne de code), et cette bibliothèque fait un simple appel pour que le tri se fasse). Il n'y a pas de statique ici (sauf pour la méthode de test), et pas d'interface utilisateur. Je vais vous montrer ce que je l'ai fait jusqu'à présent:

public interface Citable 
{ 
    public String getISBN(); 
    public String getAuthor(); 
    public String getTitle(); 
    public String getPublisher(); 
    public int getPublicationYear(); 
    public int getMonth(); 
    public int getDay(); 
    public int getPageCount(); 
} 

et l'interface du livre:

import java.util.*; 
public abstract class Book implements Citable, Comparable 
{ 
    /** 
    * Constructor for objects of class Book 
    */ 
    public Book() 
    { 
     Collections.sort(ISBN); 
    } 

    public String toString(){ 
     String info = ISBN + "\n" + title + "\n" + author + "\n" + publisher + 
     "\n" + publicationYear + "\n" + month + "\n" + day; 
     return info; 
    } 
} 

Dans la classe du livre, je suis à la fois la mise en œuvre de l'interface que je l'ai fait et de Java intégré Comparable. Ma question est la suivante: Dans la classe Book, j'obtenais l'erreur: Book n'est pas abstrait et ne remplace pas la méthode abstraite getPageCount dans Citable. La seule façon de stopper l'erreur était de rendre le résumé de la classe Livre. Cependant, je ne reçois aucune indication que je devrais rendre cette classe abstraite. Y a-t-il un moyen de s'en sortir?

+0

Ne faites pas de votre résumé de la classe 'Book'. Implémentez simplement les méthodes de l'interface 'Citable'. –

+0

Dans votre explication, vous échangez l'interface et la classe comme si elles signifiaient la même chose. Mais ils ne le font pas. S'il vous plaît prenez le temps de lire ce que vous avez écrit et d'être plus clair sur ce que vous voulez. – davidxxx

Répondre

0

Votre classe Book implémente deux interfaces, à savoir Citable et Comparable. Cela signifie que vous devez implémenter les méthodes de ces interfaces dans votre classe. La seule autre façon serait de rendre la classe Book abstract, ce qui signifie que vous ne pouvez pas l'instancier. Mais ce n'est certainement pas ce que vous voulez.

Votre classe Book ressemblerait à quelque chose comme ceci:

public class Book implements Citable, Comparable 
{ 
    /** 
    * Constructor for objects of class Book 
    */ 
    public Book() 
    { 
     Collections.sort(ISBN); 
    } 

    public String toString(){ 
     String info = ISBN + "\n" + title + "\n" + author + "\n" + publisher + 
     "\n" + publicationYear + "\n" + month + "\n" + day; 
     return info; 
    } 

    @Override 
    public int compareTo(Object o) { 
     //Implement this method 
    } 

    @Override 
    public String getISBN() { 
     return isbn; 
    } 

    //other methods from your interfaces here... 
} 
0

Pour autant que je compris de votre stratégie de solution est la création d'une interface pour le contrat de la méthode et la mise en œuvre de cette interface dans votre classe. Pour cela d'abord, permettez-moi de rappeler que, une fois que vous implémentez une interface, vous devez implémenter toutes ses méthodes abstraites. L'erreur est liée à cela. Ainsi, il existe deux options. Premièrement, vous pouvez implémenter des méthodes Citable dans la classe Book. Deuxièmement, vous pouvez écrire ces méthodes par défaut dans l'interface de Citable et les utiliser sur la classe Book. J'ai partagé un exemple de code avec quelques commentaires s'il vous plaît vérifier les

Exemple de code:

import java.util.Collections; 

public class Book implements Citable, Comparable 
{ 
    /** 
    * Constructor for objects of class Book 
    */ 
    public Book() 
    { 
     Collections.sort(getISBN());//there is no sort method for Strings, sort method is only for lists 
    } 

    public String toString(){ 
     String info = getISBN() + "\n" + title + "\n" + author + "\n" + publisher + 
     "\n" + publicationYear + "\n" + month + "\n" + day;//You need to use getter methods 
     return info; 
    } 

    @Override 
    public int compareTo(Object o) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public String getISBN() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public String getAuthor() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public String getTitle() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public String getPublisher() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public int getPublicationYear() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public int getMonth() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public int getDay() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public int getPageCount() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 
} 
+0

J'ai essayé de mettre en œuvre les méthodes, mais je reçois toujours –

+0

S'il vous plaît vérifier la réponse éditée avec l'exemple de code –