เลือกใช้ Trait และ Abstract class ใน Scala

ใน Scala นั้นมี Trait ซึ่งเป็นการทำงานคล้ายๆ กับ Abstract class อยู่แล้ว โดยทั่วไปคนก็มักจะใช้ Trait เอาไว้ก่อนเพราะมันสามารถแปลงเป็น Abstract class ทีหลังได้ แถมยังสามารถ Mixin หรือรวมหลายๆ Trait มาใช้ในคลาสเดียวกัน ซึ่งในคลาสแต่ละตัว Extend ได้เพียงคลาสเดียว และเท่าที่ลองศึกษาดูเราจะเลือกใช้ Abstract class ก็ต่อเมื่อมี

  1. ใน Abstract class เราสามารถใช้ Constructor ได้และ Type Parameter แต่ใน Trait เราทำไม่ได้ เรารับได้แค่ Type Parameter เท่านั้น
  2. Abstract class สามารถทำงานร่วมกับ Java ได้อย่างดี โดยไม่ต้องใช้ Wrapper เมื่อไหร่ที่มีการเรียกจาก Java ควรเลือกตัว Abstract clas แต่ในกรณีของ Trait สามารถทำงานได้ก็ต่อเมื่อใน Trait นั้นไม่มี Implementation code (อย่างที่เราทราบว่าใน Scala ตัว Trait ก็คล้ายกับ Iterface ที่สามารถมีโค้ดได้)

References
[1]
http://stackoverflow.com/questions/1991042/what-is-the-advantage-of-using-abstract-classes-instead-of-traits
[2]
https://www.safaribooksonline.com/library/view/scala-cookbook/9781449340292/ch04s13.html

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.