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:
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
.
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.
Probablement l'une des nombreuses autres façons de s'y prendre. :-)
S'il vous plaît expliquer plus sur vos besoins spécifiques –
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. –
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