2017-08-11 5 views
-6

Est-il possible et logique qu'une classe dérivée n'ait pas besoin de certaines méthodes ou attributs de sa classe parente?classe dérivée ne nécessitant pas certaines méthodes ou attributs parent

Par exemple,

public class FinishedCourse extends Course{ 
    ... 
} 

classe FinishedCourse qui est dérivé de la classe de cours, mais n'a pas besoin certaines des méthodes ou des attributs de la classe de cours

+1

S'il vous plaît expliquer plus sur vos besoins spécifiques –

+0

Absolument oui, mais par classe parente logique devrait contenir des méthodes et des propriétés qui seront Hared par plusieurs classes dérivées et si votre classe dérivée n'a pas besoin de beaucoup de propriétés de classe dérivée et les méthodes seront quelque chose d'illogique. –

+0

Pas tout à fait: l'héritage est habituellement pour les objets qui spécialisent/approfondissent le parent; Dans votre exemple simple, il ressemble plus à un cours est une * spécialisation * d'un cours fini - mais bien sûr fini/non fini peut être un * statut *, donc l'exemple est vraiment trop simple. – watery

Répondre

1

Je ne suis pas sûr de ce que vous essayez de faire avec cela. Mais je pense que cela éclaircira les choses pour vous.

public class Course{ 
    private String course = "CS101"; 
} 


public class FinishedCourse extends Course{ 

    public void displayCourse(){ 

    System.out.println(super.course); //compilation error. 
    //You cannot access private variables even if it is in direct parent class 
    } 
} 
0

Il est ni possible ni logique.

Possible: Non. Lorsque vous créez une sous-classe, elle hérite de tous les attributs publics (et protégés) de la classe parente. (Il hérite également des bits privés, mais il ne peut pas y accéder.) Bien que vous puissiez remplacer certaines méthodes par quelque chose qui lève une exception pour indiquer qu'elles ne sont plus pertinentes (IllegalStateException), la sous-classe aura toujours la méthode cela peut être considéré subjectivement comme un mauvais design. (Dans d'autres milieux, il peut être considéré subjectivement comme pragmatique.)

logique: Non Une sous-classe a une relation « est un » avec sa super-classe. Vous pouvez utiliser un FinishedCourse n'importe où un Course est prévu, et en fait le code utilisant l'instance peut bien ne pas savoir (ou se soucier) qu'il traite avec une sous-classe plutôt qu'avec Course.

Au lieu de cela, deux options:

  1. Vous pourriez avoir une classe de base qui implémente seulement ce FinishedCourse besoins (peut-être BaseCourse), et ont FinishedCourse et Course les deux sous-classer. Lorsqu'un cours est terminé, créez une instance FinishedCourse pour remplacer l'instance Course.

  2. Avoir un Course juste contenir des informations de cours, et séparément avoir un objet CourseHandler qui sait comment gérer les cours qui sont en cours.

  3. Probablement l'une des nombreuses autres façons de s'y prendre. :-)

0

Est-il possible et logique qu'une classe dérivée n'a pas besoin d'une les méthodes ou les attributs de la classe parente?

Si une méthode est définie dans la classe parente, ses sous-classes doivent généralement être utilisées pour l'utiliser. Rendre une classe hériter d'une méthode qui ne sera jamais utilisée est souvent un problème de conception car l'API ne répond pas à ses besoins.
Cela rend l'intention de classe non claire et sujette aux erreurs.

Ce type de conception peut apparaître lorsque l'héritage est incorrectement utilisé. Par exemple lorsque nous utilisons l'héritage pour faire des méthodes héritées et ne pas faire hériter une classe/un concept.Maintenant, il est parfaitement valide qu'une méthode d'une classe parente soit surchargée par une sous-classe et que cette méthode de dépassement ne dépende pas du tout de la super méthode (méthode de la classe parent).