การสร้างคอนสตรัคเตอร์

Download Report

Transcript การสร้างคอนสตรัคเตอร์

คอนสตรัคเตอร์

่ ชอเดี
่
่ กเรียกใช ้
คอนสตร ัคเตอร ์เป็ นเมธอด ทีมี
ื่ ยวกับชือคลาส
ซึงถู
่ การสร ้างอ็อบเจกต ์ โดยใช ้คาสัง่ new
งานเมือมี
คอนสตร ัคเตอร ์ มีรป
ู แบบดังนี ้
[modifier] ClassName([arguments]){
[statement]
}


่ มก
คอนสตร ัคเตอร ์ เป็ นเมธอดทีไม่
ี ารส่งค่ากลับ จึงต ้องระบุคยี ์
เวิร ์ด void หน้าคอนสตร ัคเตอร ์
่
โดยทัวไป
access modifier ของคอนสตร ัคเตอร ์จะเป็ น public ถ ้า
กาหนดเป็ น private จะทาให ้ไม่สามารถสร ้างอ็อบเจกต ์ของคลาส
่
นั้นจากคลาสอืนได
้

่
โดยทัวไป
คลาสทุกคลาสจะมีคอนสตร ัคเตอร ์ แบบ
่
default แม้จะไม่มก
ี ารเขียนคาสังสร
้างคอนสตร ัคเตอร ์ใน
โปรแกรม โดยคอนสตร ัคเตอร ์แบบ default จะมีรป
ู แบบ
public ClassName(){
}

่ ่ภายใน
คอนสตร ้คเตอร ์แบบ default จะไม่มค
ี าสังอยู
คอมไพเลอร ์จะใส่คอนสตร ัคเตอร ์แบบ default ให ้
โปรแกรมโดยอัตโนมัติ

เช่น คลาส Student จะมีคอนสตร ัคเตอร ์แบบ default ที่
คอมไพเลอร ์ใส่ให ้โปรแกรม ดังนี ้
public class Student{
…
public Student(){
}
}
การสร ้างคอนสตร ัคเตอร ์

สามารถสร ้างคอนสตร ัคเตอร ์ ในคลาสใดๆตามต ้องการ
่ ้คอนสตร ัคเตอร ์ กาหนดค่าให ้คุณลักษณะของ
เพือใช
คลาส เช่น
public Student {
private String id;
private String Name;
public Student(String ID,String name){
id=ID;
Name=name;
}
}


่
้
เมือสร
้างคอนสตร ัคเตอร ์ขึนใหม่
จะทาให ้คอนสตร ัคเตอร ์
แบบ default หายไป
่ คอนสตร ัคเตอร ์
ดังนั้นการสร ้างอ็อบเจกต ์ของคลาสทีมี
่ งผ่านค่าพารามิเตอร ์ ให ้
ใหม่ จะต ้องใช ้คาสัง่ new ทีส่
่ าหนดไว ้ในคอนสตร ัคเตอร ์
สอดคล ้องกับ argument ทีก
นั้นๆ
เช่น
Student s1=new Student(“001”,”Somchai”);
ไม่สามารถใช ้คาสัง่
Student s1=new Student();
้
ขันตอนการท
างานของคาสัง่ new
่ ้คาสัง่ new สร ้างอ็อบเจกต ์ของคลาสใดๆขึนใช
้ ้งาน จะ
เมือใช
มีลาดับการ
ทางานดังนี ้
้ ในหน่
่
1. กาหนดเนื อที
วยความจาให ้กับอ็อบเจกต ์
่ ้นให ้กับคุณลักษณะของอ็อบเจกต ์
2. กาหนดค่าเริมต
่ ่
3. กาหนดค่าคุณลักษณะของอ็อบเจกต ์ตามคาสังที
ประกาศไว ้
4. เรียกใช ้ Constructor
ตัวอย่าง

่
เมือสร
้างอ็อบเจกต ์ของคลาส MyDate ด ้วยคาสัง่
MyDate d1 = new MyDate(16,8,2010);
้ั
จะมีขนอนในการท
างานดังนี ้
หน่ วยความจา
1.
day
month
d1
year
หน่ วยความจา
2.
d1
0
day
0
month
0
year
หน่ วยความจา
3.
d1
1
day
1
month
2000
year
4.
d1
16
day
8
month
2010
year
คอนสตร ัคเตอร ์แบบ overload




สามารถสร ้างคอนสตร ัคเตอร ์แบบ overload ได ้
เช่นเดียวกับเมธอดแบบ overload
คอนสตร ัคเตอร ์แบบ overload จะมีจานวนหรือชนิ ด
ข ้อมูลของargument ต่างกัน
่ ้คาสัง่ new สร ้างอ็อบเจกต ์ จะต ้องส่งผ่าน
เมือใช
่ ้าง ตัว
พารามิเตอร ์ ให ้สอดคล ้องกับคอนสตร ัคเตอร ์ทีสร
ใดตัวหนึ่ ง
ข ้อดี ของการสร ้างคอนสตร ัคเตอร ์แบบ overload คือทา
ให ้สามารถสร ้างอ็อบเจกต ์ได ้หลายรูปแบบ
ตวั อย่าง โปรแกรมแสดงคอนสตร ัคเตอร ์แบบ
overload
เมธอด super()

่
โดยทัวไป
คุณลักษณะเมธอ ดของ superclass จะสืบทอด
ไปยัง subclass แต่สาหร ับคอนสตร ัคเตอร ์ จะไม่มก
ี ารสืบ
ทอดจาก superclass ไปยัง subclass เช่น
public class Parent{
…
}
public class Child extends Parent{
public Child(String s) {
…
}
}

ดังนั้น การสร ้างอ็อบเจกต ์ของคลาส Child โดยใช ้คาสัง่
Child c1 = new Child();

จึงไม่สามารถทาได ้ เพราะในคลาส Child มีการสร ้างคอน
สตร ัคเตอร ์หใม่แทนแบบ default แล ้ว
แต่ subclass สามารถเรียกใช ้คอนสตร ัคเตอร ์ของ
superclass ได ้ โดยใช ้เมธอด super () และส่งผ่าน
่
argument ทีสอดคล
้องกันไป และ เมธอด super() ต ้อง
่
เป็ นคาสังแรกของคอนสตร
ัคเตอร ์

่
โดยทัวไปการท
างานของคอนสตร ัคเตอร ์ของคลาสใด จะ
มีผลทาให ้เรียกใช ้คอนสตร ัคเตอร ์แบบ default ของ
superclass ของคลาสนั้นๆอยู่แล ้ว
ตัวอย่าง การเรียกใช้คอนสตร ัคเตอร ์ของ
superclass
่
่ าคัญ
คีย ์เวิร ์ดอืนๆที
ส



่ ยวข ้องกับคลาส เมธ
ภาษาจาวา ได ้กาหนดคีย ์เวิร ์ดทีเกี
่ าคัญไว ้ 2 ตัวคือ static และ final
อด และคุณลักษณธทีส
คีย ์เวิร ์ด static ใช ้ระบุวา่ ตัวแปร หรือ ค่าคงทีใด เป็ น
คุณลักษณะของคลาส หรือเมธอดใดเป็ นเมธอดของ
คลาส
่ าหนดไม่ให ้
คีย ์เวิร ์ด final จะใช ้ในคลาส หรือเมะอด เพือก
่ าหนดให ้เป็ น
มีการสืบทอด หรือใช ้ในคุณลักษณะเพือก
ค่าคงที่
คุณลักษณะแบบ static


่ ้ร่วมกัน
คุณลักษณะของคลาส จะเป็ นคุณลักษณะทีใช
ในทุกอ็อบเจกต ์ และสามารถเรียกใช ้งานได ้โดยไม่
้
อน
จาเป็ นต ้องสร ้างอ็อบเจกต ์ของคลาสขึนมาก่
่ นคุณลักษณะของคลาสคือ ตัว
ตัวแปร หรือค่าคงที่ ทีเป็
แปรหรือค่าคงที่
่ modifier เป็ น static คุณลักษณะของคลาสนี จะเป็
้
ทีมี
นตัว
่ ้ร่วมกันในทุกอ็อบเจกต ์
แปรหรือค่าคงที่ ซึงใช
่
ตวั อย่าง การใช้คย
ี ์เวิร ์ด static เพือประกาศตั
ว
่ นคุณลักษณะของคลาส
แปรทีเป็
เมธอดแบบ static


่ modifier เป็ น static
เมธอดแบบ Static เป็ น เมธอดทีมี
่
โดยทัวไป
จะประกาศให ้เมธอดใดๆเป็ นเมธอดแบบ static
้นเป็ นเมธอดทีใช
่ ้งานทัวไป
่
ในกรณี ทเมธอดนั
ี่
สามารถเรียกใช ้เมธอดแบบ static ได ้โดยการเรียกผ่าน
่
ชือคลาส
เช่นเดียวกับคุณลักษณะของคลาส
รูปแบบการใช ้งาน
ClassName.methodName();

่
ภาษาจาวา ได ้กาหนดเงือนไขของเมธอดแบบ
static ดังนี ้
1. เมธอดแบบ static จะไม่สามารถเรียกคุณลักษณะ หรือ
เมธอด
่ ได ้เป็ นแบบ static (non-static) ได ้
ทีไม่
2. เมธอดแบบ static จะไม่สามารถมีเมธอดแบบ
overidden ได ้
คีย ์เวิร ์ด final

คีย ์เวิร ์ด final สามารถใช ้เป็ น modifier สาหร ับคลาส ตัว
แปร และเมธอดได ้ โดยที่
่ modifier เป็ น final จะเป็ นคลาสทีไม่
่ สามารถ
1. คลาสทีมี
่ บทอดได ้
ให ้คลาสอืนสื
่ modifier เป็ น final คือเมธอดทีจะไม่
่
2. เมธอดทีมี
สามารถ
มีเมธอดแบบ overidden ได ้
ตัวอย่าง
piblic class Student {
...
public final void showDetail(){
...
}
}
ถ ้าคลาส GradStudent สืบทอดมาจากคลาส Student คลาส
่ อ่
GradStudent จะไม่สามารถมีเมธอดแบบ overidden ทีชื
showDetail() ได ้
่ modifier เป็ น final คือ ค่าคงที่
3. ตัวแปรทีมี
่
้ั ยว โดย
ค่าคงทีสามารถก
าหนดค่าได ้เพียงครงเดี
่ การเรียกใช ้งาน และเมือ
่
จะต ้องกาหนดค่าก่อนทีจะมี
่
กาหนดค่าแล ้วจะไม่สามารถเปลียนแปลงค่
าได ้
่ ้นเป็ นคุณลักษณะของอ็อบเจกต ์ จะต ้อง
ถ ้าค่าคงทีนั
่
กาหนดค่าในคาสังประกาศตั
วแปร หรือใช ้คาสัง่
กาหนดค่าภายในคอนสตร ัคเตอร ์ของคลาส
่ ่ภายในเมธอด จะต ้องกาหนดค่าในคาสัง่
ถ ้าค่าคงทีอยู
่ าหนดค่าภายในเมธอด
ประกาศตัวแปร หรือใช ้คาสังก
่ การเรียกใช ้งาน
ก่อนทีจะมี
คลาสแบบ abstract


่ modifier เป็ น abstract หมายความว่า
คลาสทีมี
่ สมบูรณ์ โดยมีเมธอดแบบ
คลาสนั้นยังเป็ นคลาสทีไม่
่ นเมธอดทียั
่ งไม่สมบูรณ์อย่างน้อยหนึ่ ง
abstract ซึงเป็
เมธอดอยู่ในคลาส
เมธอดแบบ abstract มีรป
ู แบบการประกาศดังนี ้
[modifier] abstract return_type methodName([argument]);

่ งไม่สมบูรณ์ เป็ นเมธอดทียั
่ งไม่มบ
เมธอดทียั
ี ล็อกคาสัง่ { }
อยู่ภายใน เมธอด
ตัวอย่าง คลาสแบบ abstarct
้
่ ้คลาสอืนสื
่ บทอด
คลาสแบบ abstract กาหนดขึนมาเพื
อให
่
่ บทอดจะต ้องกาหนดบล็อกคาสังในเมธอดที
่
่ งไม่สม
โดยทีคลาสที
สื
ยั
่ บทอดมาจากคลาส
ตัวอย่าง คลาสทีสื
แบบ abstract
อินเตอร ์เฟส


อินเตอร ์เฟส (interface) มีลก
ั ษณะคลาสกับคลาสแบบ
่
abstarct โดยทีคลาสแบบอิ
นเตอร ์เฟส จะประกอบด ้วย
่ งไม่สมบูรณ์เท่านั้น
เมธอดทียั
รูปแบบการประกาศคลาสแบบอินเตอร ์เฟส
[modifier] interface InterfaceName {
[method();]
}
ตัวอย่าง อินเตอร ์เฟส
้
่ ้คลาสอืนน
่ าไปใช ้งาน โดยใช ้ค
อินเตอร ์เฟส กาหนดขึนมาเพื
อให
Implements โดยมีรป
ู แบบดังนี ้
[modifier] class ClassName implements InterfaceName{
[methods();]
}
ตัวอย่าง คลาสที่ implements
อินเตอร ์เฟส