ホームページ >Java >&#&チュートリアル >Java の一般的な手法であるミックスインを使用してクラスの構成を実装する方法
トレイトが複合クラスで使用される場合、それはミックスインと呼ばれます。
うわー ######親切
D
親クラスもあるよ
B
そしてミックスイン
C
。クラスは親クラスを 1 つだけ持つことができますが、複数のミックスインを持つことができます (キーワードを使用)
###伸ばす###
そして
###と###
)。ミックスインは、親クラスと同じ親クラスを持つことができます。
ここで、抽象クラスが使用されるさらに興味深い例を見てみましょう:
<p><code>abstract class A {</code><code> val message: String</code><code>}</code><code>class B extends A {</code><code> val message = "I'm an instance of class B"</code><code>}</code><code>trait C extends A {</code><code> def loudMessage = message.toUpperCase()</code><code>}</code><code>class D extends B with C</code><code><br></code><code>val d = new D</code><code>println(d.message) // I'm an instance of class B</code><code>println(d.loudMessage) // I'M AN INSTANCE OF CLASS B</code></p>
このクラスには抽象型があります。
T標準の反復子メソッド。
次に、具象クラス (すべて抽象メンバー) を実装します。
T
、
次がある
そして
###次###
実装されます):
abstract class AbsIterator { type T def hasNext: Boolean def next(): T}
StringIterator
とともに
###弦###
文字列を反復処理するために使用できる型パラメータのコンストラクター。 (たとえば、文字列に特定の文字が含まれているかどうかを確認します):
次に、同じく継承するトレイトを作成します。
AbsIterator。
abstract class AbsIterator { type T def hasNext: Boolean def next(): T }
この特性は実装されています
foreach
メソッド - 反復処理する要素がまだある限り (
while (次がある)
)、常に次の要素 (
###次()###
) 渡された関数を呼び出します
f: T => 単位
。なぜなら
これは特性なので実装する必要はありません
AbsIterator
の抽象メンバー。 次に行う必要があるのは、
文字列反復子
そして
リッチイテレータ
の関数はクラスに結合されます。
trait RichIterator extends AbsIterator { def foreach(f: T => Unit): Unit = while (hasNext) f(next()) }
新しいクラス
リッチストリングイッター
親クラスもあるよ
文字列反復子
そしてミックスイン
リッチイテレータ
。単一継承では、このような柔軟性は得られません。
以上がJava の一般的な手法であるミックスインを使用してクラスの構成を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。