Özel durumunuzda, axel22'den kapsamlı bir yanıt aldınız. Sadece eklemek istiyorum, geçersiz kılma değiştiricisiyle karşılaşabileceğiniz en az bir durum var. Anahtar kelime, özellik yöntemleri ile de kullanılabilir.
class ConsoleWriter extends Writer {
def print(str: String) = println(str)
}
Şimdi, onun davranışını değiştirmek bir özelliği oluşturmak istediğiniz bir konsolda yazdırır
abstract class Writer {
def print(str: String)
}
ve somut uygulama:
özet bir sınıfı olduğunu düşünün. Aşağıdaki uygulanması bak: soyut ve geçersiz kılmayı: Bir yöntem iki değiştiricileri olduğunu
trait Uppercase extends Writer {
abstract override def print(str: String) =
super.print(str.toUpperCase())
}
dikkat edin.Bu, yalnızca özelliklerin izin ve özellik, yapabileceğiniz yukarıdaki tanım ile
söz
yılında yöntemin somut bir tanıma sahip bazı sınıfa karışık gerektiği anlamına gelir edilir:
val writer = new ConsoleWriter with Uppercase
writer.print("abc")
hangi edecek aynı boşuna
ABC
Çok sonucu verir, daha fazla özellikleri ekleyebilirsiniz:
trait WithSpaces extends Writer {
abstract override def print(str: String) =
super.print(str.split("").mkString(" ").tail)
}
Eğer göreceksiniz
val writer = new ConsoleWriter with Uppercase with WithSpaces
writer.print("abc")
çağrı Şimdi
:
ABC
özellikleri manuel kontrol değiştirici yukarıdaki kullanım scala bir ayırt edici özelliktir ve içinde görmez java.
Yalnızca geçersiz kılınan yöntem soyutsa, bu doğrudur axel22 s yanıtına bakın. Ayrıca, her iki bağlantınız da alakasız çünkü Java ve C++, özellikle Scala için değil. – Cubic
Kübik, geçersiz yöntemin soyut olup olmadığı önemli değil, bu zamanla değişebilir. Arayüz değişikliği, geçersiz kılma ayarda kalmaya yardımcı olur. – ArtemGr
Yanıtınız, geçersiz kılma anahtar kelimesinin Java'daki '@ geçersiz kıl 'notu ile aynı davranacağını ima eder. Bu sadece soyut yöntemleri geçersiz kılarken geçerlidir. – Cubic