sifat tersegel adalah sama dengan kelas tersegel?
Sejauh ini sealed, ya. Mereka berbagi perbedaan normal antara traitdan class, tentu saja.
Atau, jika tidak, apa perbedaannya?
Moot.
Kapan ide yang baik untuk menggunakan sifat tersegel (dan kapan tidak)?
Jika Anda memiliki sealed class X, maka Anda harus memeriksa Xdan juga setiap subclass. Hal yang sama tidak berlaku untuk sealed abstract class Xatau sealed trait X. Jadi Anda bisa melakukannya sealed abstract class X, tetapi itu jauh lebih bertele-tele daripada hanya traitdan untuk sedikit keuntungan.
Keuntungan utama menggunakan abstract classover traitadalah dapat menerima parameter. Keuntungan itu sangat relevan ketika menggunakan kelas tipe. Katakanlah Anda ingin membuat pohon yang disortir, misalnya. Anda dapat menulis ini:
sealed abstract class Tree[T : Ordering]
tetapi Anda tidak dapat melakukan ini:
sealed trait Tree[T : Ordering]
karena batas konteks (dan batas tampilan) diimplementasikan dengan parameter implisit. Mengingat bahwa sifat tidak dapat menerima parameter, Anda tidak dapat melakukannya.
Secara pribadi, saya lebih suka sealed traitdan menggunakannya kecuali beberapa alasan tertentu membuat saya menggunakan a sealed abstract class. Dan saya tidak berbicara tentang alasan yang halus, tetapi alasan yang tidak bisa Anda abaikan, seperti menggunakan kelas tipe.