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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBke hadapan
2023-05-09 22:34:26983semak imbas

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>

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}

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
      
    
    }

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())
      
    
    }

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
      
    
    }

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam