2 votes

Utiliser une méthode pour se surpasser en scala

Existe-t-il un moyen en Scala d'utiliser une méthode m dans l'implémentation de la méthode qui surcharge la même méthode m ?

À titre d'exemple, voici ce que j'ai essayé (notez que toUpperCase n'est pas implémenté) :

abstract class Person {
 def greet: String
}

class EnglishMan extends Person {
  abstract override def greet: String = 
  {
    return "hello"
  }
}

trait Angry extends Person {
abstract override def greet: String = 
{
  return toUpperCase(greet)
}

0voto

mlg Points 935

C'est ce que vous voulez ?

scala> trait Person { def greet: String }
defined trait Person

scala> class EnglishMan extends Person { def greet = "hello" }
defined class EnglishMan

scala> class Angry extends EnglishMan { override def greet = super.greet.toUpperCase }
defined class Angry

scala>

scala> new EnglishMan().greet
res3: String = hello

scala> new Angry().greet
res4: String = HELLO

Notez que trait Person n'est absolument pas pertinent pour cet exercice. Vous pouvez invoquer les méthodes de votre superclasse (même en surchargeant cette même méthode), mais vous ne pouvez pas avoir 2 méthodes sur la même portée avec le même nom (ce serait ambigu pour le compilateur).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X