W konkretnym przypadku masz kompleksową odpowiedź od axel22. Chcę tylko dodać, że istnieje co najmniej jeszcze jeden przypadek, w którym możesz napotkać modyfikator nadpisania. Słowo kluczowe może być również używane z metodami cech.
Wyobraź sobie, że masz klasę abstrakcyjną:
abstract class Writer {
def print(str: String)
}
i jego konkretną implementację, która drukuje na konsoli
class ConsoleWriter extends Writer {
def print(str: String) = println(str)
}
Teraz chcesz utworzyć cechę, która będzie zmodyfikować swoje zachowanie. Spójrz na poniższy realizacji:
trait Uppercase extends Writer {
abstract override def print(str: String) =
super.print(str.toUpperCase())
}
Zauważmy, że metoda ma dwa modyfikatory: streszczenie i zastąpić.To jest dozwolone tylko dla cech i oznacza to, że cecha należy mieszać do jakiejś klasy, który ma konkretną definicję metody mowa
Z powyższej definicji, można zrobić:
val writer = new ConsoleWriter with Uppercase
writer.print("abc")
który będzie uzyskując wynik
ABC
dużo w ten sam marne, można dodać więcej cech:
trait WithSpaces extends Writer {
abstract override def print(str: String) =
super.print(str.split("").mkString(" ").tail)
}
Teraz kiedy zadzwonić
val writer = new ConsoleWriter with Uppercase with WithSpaces
writer.print("abc")
widać:
ABC
Powyższe użycie modyfikatora wymuszenia w cech jest wyróżnikiem w Scala i nie będzie widać go w Jawa.
To tylko poprawne, jeśli metoda, która została nadpisana, była abstrakcyjna, patrz odpowiedź axel22 s. Ponadto, oba twoje linki są nieistotne, ponieważ odnoszą się do Javy i C++, a nie Scali w szczególności. – Cubic
Sześcienny, nie ma znaczenia, czy przesłonięta metoda jest abstrakcyjna, może się zmieniać z czasem. Zmiana interfejsu, nadpisanie pomaga pozostać w zgodzie. – ArtemGr
Twoja odpowiedź oznacza, że słowo kluczowe "override" zachowuje się tak samo jak adnotacja '@ Override' w Javie. Jest to poprawne tylko w przypadku nadpisywania abstrakcyjnych metod. – Cubic