継承できないシールクラス
プログラミングC# p117
またも新しいキーワード「sealed」
これをクラスに指定すると、そのクラスからは継承できなくなる。
sealed class Sealed { } class Derived : Sealed { }
コンパイルするとこうなる。
Sealed.cs(5,7): error CS0509: 'Derived': シール型 'Sealed' から派生することはできません。
ちなみにJavaの場合は、finalを付ける。
public final class Sealed { } class Derived extends Sealed { }
コンパイルするとこうなる。
Sealed.java:5: final Sealed からは継承できません。 class Derived extends Sealed
C#は「派生することはできません。」で、Javaは「継承できません。」か。
なんか微妙に言い回しが違うのは、お互い意識しているから?なんて考えすぎか。。
Javaのfinalキーワードは、昨日書いた一度しか初期化できない変数(定数)にも用いられるため、二重の意味を持っています。同じキーワードでも使うコンテキストによって意味が異なります。
一方のC#は、それぞれreadonlyキーワード、および、sealedキーワード(おまけにconstキーワードもある)に明確に分けていますね。
どっちが良いとか悪いとか人それぞれだと思うのですが、個人的には、あれこれキーワードが出てきても覚えるのが大変だし、Javaみたいにキーワードを少なくする方向の方がいいかなと思います。