ホームページ >Java >&#&チュートリアル >Java の一般的な手法であるミックスインを使用してクラスの構成を実装する方法

Java の一般的な手法であるミックスインを使用してクラスの構成を実装する方法

WBOY
WBOY転載
2023-05-09 22:34:26953ブラウズ

トレイトが複合クラスで使用される場合、それはミックスインと呼ばれます。

うわー ######親切

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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。