File tree Expand file tree Collapse file tree 1 file changed +10
-1
lines changed Expand file tree Collapse file tree 1 file changed +10
-1
lines changed Original file line number Diff line number Diff line change @@ -15,12 +15,15 @@ Trait ใช้เพื่อแชร์ interface และ field ระห
1515คลาส และ object สามารถขยาย trait ได้แต่ trait ไม่สามารถ instant เป็น object และไม่สามารถมี parameter ได้
1616
1717## การกำหนด trait
18+
1819วิธีที่ง่ายที่สุดในการกำหนด trait คือการประกาศด้วย keyword ` trait ` และ indentifier:
1920
2021``` scala mdoc
2122trait HairColor
2223```
24+
2325trait จะมีประโยชน์อย่างยิ่งด้วยการเป็น generic type และเป็น abstract method
26+
2427``` scala mdoc
2528trait Iterator [A ] {
2629 def hasNext : Boolean
@@ -31,7 +34,9 @@ trait Iterator[A] {
3134การขยาย ` trait Iterator[A] ` ต้องการ type ` A ` และ implementation ของ method ` hasNext ` และ ` next `
3235
3336## การใช้ traits
37+
3438ใช้ keyword ` extends ` เพื่อขยาย trait ดังนั้นจะ implement abstract member ใดๆ ของ trait โดยใช้ keyword ` override ` :
39+
3540``` scala mdoc:nest
3641trait Iterator [A ] {
3742 def hasNext : Boolean
@@ -55,10 +60,13 @@ val iterator = new IntIterator(10)
5560iterator.next() // returns 0
5661iterator.next() // returns 1
5762```
63+
5864คลาส ` IntIterator ` นี้รับค่า parameter ` to ` เป็น upper bound มัน ` extends Iterator[Int] ` ซึ่งหมายความว่า method ` next ` จะต้อง return เป็น Int
5965
6066## Subtyping
67+
6168ในเมื่อ trait ที่ให้มานั้น required, subtype ของ trait สามารถถูกใช้แทนที่ได้
69+
6270``` scala mdoc
6371import scala .collection .mutable .ArrayBuffer
6472
@@ -77,5 +85,6 @@ animals.append(dog)
7785animals.append(cat)
7886animals.foreach(pet => println(pet.name)) // พิมพ์ Harry Sally
7987```
80- ` trait Pet ` มี abstract field ` name ` ซึ่ง implement โดย Cat และ Dog ใน constructor ของมัน
88+
89+ ` trait Pet ` มี abstract field ` name ` ซึ่ง implement โดย Cat และ Dog ใน constructor ของมัน
8190ในบรรทัดสุดท้าย เราเรียก ` pet.name ` ซึ่งจะต้องถูก implement แล้วใน subtype ใดๆ ของ trait ` Pet `
You can’t perform that action at this time.
0 commit comments