2017-01-24 1 views
0

Que signifie ce qui suit et comment puis-je l'utiliser? Je sais qu'il ne peut y avoir d'instance ou d'objet provenant d'une classe abstraite, alors qu'est-ce que cette méthode retourne réellement? Est-ce que cela peut être utilisé pour la création d'une liste ou d'un arbre binaire?La méthode abstraite renvoie la classe de base. Qu'est-ce que ça veut dire?

Est-ce mieux techniquement qu'une classe concrète et pourquoi?

+0

La classe abstraite est un modèle pour l'autre classe, vous devez l'implémenter - ils ne contiennent pas d'implémentation pour les méthodes. Vous devez créer une classe héritée d'une méthode abstraite et de substitution. – themoah

Répondre

2

Comme vous le faites remarquer, cette classe est abstraite, donc il ne peut y avoir d'instances directes. Cela signifie qu'il doit y avoir des sous-classes et que ces sous-classes doivent implémenter A_method. Que retourneront ces sous-classes? Des instances d'eux-mêmes, peut-être, et puisqu'ils sont des sous-classes de An_Abstract_Class ils satisfont le type de retour.

Par exemple:

class A_Concrete_Class extends An_Abstract_Class { 
    def A_method(x:Int) : An_Abstract_Class = this 
} 

Fait intéressant, vous pouvez aussi le faire:

class A_Concrete_Class extends An_Abstract_Class { 
    def A_method(x:Int) : A_Concrete_Class = this 
} 

La différence est que la substitution A_method a spécifié un type de retour de A_Concrete_Class. Comme il s'agit d'une sous-classe de An_Abstract_Class, la compilation est parfaite. Ceci est connu comme un "type de retour co-variant" - c'est-à-dire que le type de retour d'une implémentation de sous-classe est autorisé à être un sous-type du type de retour de classe de base.

Vous pouvez en effet utiliser ce genre de chose pour implémenter un arbre binaire, bien que dans Scala, une approche plus idiomatique serait d'utiliser une implémentation de classe trait et cas.