trait A
> defined trait A
class B extends A
> defined class B
class C with A
> <console>:1: error: ';' expected but 'with' found.
class C with A
^
ただし、クラスCをAnyRefから拡張すると、最後の文が正しく機能します。クラス 'class'を拡張することなく、クラスを拡張することなく、 'with'キーワードを持つようなmix mixin
class C extends AnyRef with A
> defined class C
これは言語の文法に欠けていますか?または任意の特定の概念的理由?概念的にはclass B extends A
とclass B with A
は異なると思います。
PS:同様の質問またはエラーを探してみました"';期待されているが、「あり」が見つかりました。。これに既に回答している場合は、重複をマークしてください。
はどのように 'クラスBは異なるA'でA'と'クラスBを拡張していますか?具体的にどのような行動が違うと思いますか? – Dima
抽象的な 'run'メソッドを持つ' Runnable'のような特性を考えてみましょう。クラス「TaskTemplate」からRunnable mixinまで拡張したクラス「Task」があるかもしれません。何も拡張していないが、単にRunnableとmixinする別のクラスの 'PushNotificationTask'では、PushNotificationTaskはRunnableを拡張する必要がありますが、**キーワードを使って** mixinとして拡張する必要はありません。概念的には、あるいはあなたがJavaのバックグラウンドからのものであれば、それをスーパークラスとはみなさないように、Runnable mixinを実装する必要があります。 – rajuGT
はい、いくつかのクラスを拡張して形質でミックスすることはできますが、それは無関係です。問題はどのように具体的に2つのクラスを区別するかです。それぞれのクラスのうちの1つはAを拡張し、もう1つはAを追加することなく他のクラスを拡張します。 – Dima