Rumah > Java > javaTutorial > Bagaimana untuk melaksanakan komposisi kelas menggunakan mixin, teknik biasa di Jawa

Bagaimana untuk melaksanakan komposisi kelas menggunakan mixin, teknik biasa di Jawa

WBOY
Lepaskan: 2023-05-09 22:34:26
ke hadapan
950 orang telah melayarinya

Apabila sesuatu sifat digunakan dalam kelas komposit, ia dipanggil mixin.

<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>
Salin selepas log masuk

kelas D Ada kelas ibu bapa B dan campuran masuk C . Kelas hanya boleh mempunyai satu kelas induk tetapi boleh mempunyai berbilang campuran (menggunakan kata kunci extend dan with ). Mixin mungkin mempunyai kelas induk yang sama dengan kelas induk.

Sekarang, mari lihat contoh yang lebih menarik di mana kelas abstrak digunakan:

abstract class AbsIterator {  type T  def hasNext: Boolean  def next(): T}
Salin selepas log masuk

Terdapat jenis abstrak dalam kelas ini T dan kaedah lelaran piawai.

Seterusnya, kami akan melaksanakan kelas konkrit (semua ahli abstrak T , hasNext dan next akan direalisasikan):

   
     
   
   
   abstract class AbsIterator {
      
    
      type T
      
    
      def hasNext: Boolean
      
    
      def next(): T
      
    
    }
Salin selepas log masuk

StringIterator dengan a String Pembina untuk parameter jenis yang boleh digunakan untuk mengulangi rentetan. (cth. untuk melihat sama ada rentetan mengandungi aksara tertentu):

Sekarang kita mencipta sifat yang turut diwarisi daripada AbsIterator .

   
     
   
   
   trait RichIterator extends AbsIterator {
      
    
      def foreach(f: T => Unit): Unit = while (hasNext) f(next())
      
    
    }
Salin selepas log masuk

Sifat ini dilaksanakan foreach Kaedah - selagi masih ada elemen untuk diulang ( while (hasNext) ), ia akan sentiasa melihat elemen seterusnya ( next() ) memanggil fungsi yang diluluskan f: T => Unit . sebab RichIterator Ia adalah sifat dan tidak perlu dilaksanakan AbsIterator Ahli abstrak dalam .

Sekarang kita akan StringIterator dan RichIterator Fungsi dalam digabungkan ke dalam kelas.

   
     
   
   
   object StringIteratorTest extends App {
      
    
      class RichStringIter extends StringIterator("Scala") with RichIterator
      
    
      val richStringIter = new RichStringIter
      
    
      richStringIter foreach println
      
    
    }
Salin selepas log masuk

Kelas baharu RichStringIter Ada kelas ibu bapa StringIterator dan campuran masuk RichIterator . Dengan warisan tunggal, kami tidak akan mempunyai fleksibiliti ini.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan komposisi kelas menggunakan mixin, teknik biasa di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan