วันอังคารที่ 28 มีนาคม พ.ศ. 2560

อะไรคือความแตกต่างระหว่าง Abstract กับ Interface บน Java

คำถามที่มักเจอบ่อยๆ ว่าเฮ้ย คุณพอจะรู้ไหมว่า Abstract กับ Interface มันแตกต่างกันยังไง ?
เอาแล้วหล่ะสิ!!!! ตรูเขียนแมร่งมาตั้งนานแต่ไม่ค่อยจะจำว่ามันต่างไง?
ด้วยความเคยชิน เช่น เวลาเขียน Service เราจะสร้าง Interface คู่กับ Implement แต่ถ้าเราทำพวก Common เราจะอาจจะ สร้าง Abstract คิดออกแค่นี้ เอง เอ้าแล้วมันต่างกันยังไงหล่ะครับพี่น้อง

งั้นมานั่งเทียน list ข้อแตกต่างกันเลยว่าอะไรคือความแตกต่างระหว่าง abstract กับ interface บน Java

1. Interface มันทำได้แต่ประกาศอย่างเดียวเท่านั้น ไม่สามารถใส่ขั้นตอนการทำงานได้ (signature)
ส่วน Abstract ทำได้ทั้งประกาศและใส่ขั้นตอนการทำงานได้ทั้งคู่ โดย abstract class นั้นสำหรับใช้เป็น common หรือกำหนดงานพื้นฐาน (signature และ ทำงานได้)
2. Interface class สามารถ ทำให้ class ที่ implements แบบหลาย interfaces ได้พร้อมๆกัน ในขณะที่ abstract class สามารถ extends ได้มากสุดแค่ class เดียวเท่านั้น
3. เมื่อต้อง implement interface ใน java class จะต้องสร้างทุกๆ method ตาม interface ที่ implements เข้ามา แต่ถ้าเป็น Abstract class จะให้สร้าง method ตามที่ต้องใช้เท่านั้น เพราะฉะนั้น interface class ควรที่จะมี method ให้น้อยที่สุด จากนั้นค่อยมาประกอบกันผ่าน implement ก็พอแล้ว