Constructor
เป็นเมธอดที่มีชื่อเดียวกับชื่อคลาส จะถูกเรียกใช้งานเมื่อมีการสร้างออปเจ็คโดยใช้คำสั่ง new
รูปแบบ
[modifier] ClassName([arguments]) {
[statements]
}
constructor จะเป็นเมธอดที่ไม่ต้องระบุชนิดข้อมูลของค่าที่ส่งกลับและไม่ต้องใช้คีย์เวิร์ด void
Constructor แบบ default
โดยทั่วไปคลาสทุกคลาสจะมี constructor แบบ default
รูปแบบ
public ClassName() {
}
constructor แบบ default จะเป็น constructor ที่ไม่มีคำสั่งใดๆอยู่ภายใน
คอมไพเลอร์ของภาษาจาวาจะใส่ constructor แบบ default ให้กับโปรแกรมโดยอัตโนมัติ
ตัวอย่าง constructor แบบ default ของคลาส Student
public Student() {
}
การเขียน constructor
เราสามารถที่จะเขียน constructor ของคลาสใดๆก็ได้
ตัวอย่างการเขียน constructor ของคลาส Student
public Student(String ID,String n,double GPA) {
id = ID;
name = n;
gpa = GPA;
}
constructor แบบ default จะหายไปเมื่อมีการเขียน constructor ขึ้นใหม่
ขั้นตอนการทำงานของคำสั่ง new
-กำหนดเนื้อที่ในหน่วยความจำให้กับออปเจ็ค
-กำหนดค่าเริ่มต้นให้กับคุณลักษณะของออปเจ็ค
-กำหนดค่าของคุณลักษณะของออปเจ็คตามคำสั่งกำหนดค่าที่ประกาศไว้
-เรียกใช้ constructor
ตัวอย่างคลาส MyDate
public class MyDate {
private int day = 1;
private int month = 1;
private int year = 2000;
public MyDate(int d,int m,int y) {
day = d;
month = m;
year = y;
}
}
รูปแสดงขั้นตอนการทำงานของคำสั่ง new
คำสั่ง MyDate d1 = new MyDate(16,8,1972);
คีย์เวิร์ด this
คีย์เวิร์ด this หมายถึงออปเจ็คของตัวเอง
คีย์เวิร์ด this ใช้อ้างอิงคุณลักษณะและเมธอดของออปเจ็คภายในเมธอด ซึ่งมีรูปแบบดังนี้
this.attirbuteName;
this.methodName();
ตัวอย่างโปรแกรม
public class Student {
private String id;
private String name;
private double gpa;
public Student(String id,String name, double gpa) {
this.id = id;
this.name = name;
this.gpa = gpa;
}
public void showDetails() {
System.out.println("ID: "+id);
System.out.println("Name: "+name);
System.out.println("GPA: "+gpa);
}
}
คุณลักษณะเด่นของโปรแกรมเชิงออปเจ็ค
การห่อหุ้ม (Encapsulation)
คุณลักษณะของออปเจ็คจะถูกป้องกันไว้ไม่ให้ออปเจ็คอื่นที่อยู่ภายนอกเข้าถึงข้อมูลได้อย่างอิสระ ออปเจ็คอื่นๆสามารถจะเรียกใช้คุณลักษณะของออปเจ็คได้โดยเรียกผ่านเมธอด
คุณลักษณะของออปเจ็คจะถูกป้องกันไว้ไม่ให้ออปเจ็คอื่นที่อยู่ภายนอกเข้าถึงข้อมูลได้อย่างอิสระ ออปเจ็คอื่นๆสามารถจะเรียกใช้คุณลักษณะของออปเจ็คได้โดยเรียกผ่านเมธอด
ข้อดีของการห่อหุ้ม
-การซ่อนเร้นข้อมูล (Information Hiding) ออปเจ็คสามารถติดต่อกับออปเจ็คภายนอกผ่านเมธอดที่เป็น public interface ดังนั้นเราสามารถที่จะเปลี่ยนตัวแปร หรือเมธอดอื่นๆของออปเจ็คโดยไม่มีผลกระทบใดๆ
-ความเป็นโมดูล (Modularity) การพัฒนาโปรแกรมของแต่ละออปเจ็คเป็นอิสระต่อกัน ถ้ามีการเปลี่ยนแปลงเกิดขึ้นภายในออปเจ็คหนึ่งก็จะไม่มีผลกระทบต่อออปเจ็คอื่นๆ
-การซ่อนเร้นข้อมูล (Information Hiding) ออปเจ็คสามารถติดต่อกับออปเจ็คภายนอกผ่านเมธอดที่เป็น public interface ดังนั้นเราสามารถที่จะเปลี่ยนตัวแปร หรือเมธอดอื่นๆของออปเจ็คโดยไม่มีผลกระทบใดๆ
-ความเป็นโมดูล (Modularity) การพัฒนาโปรแกรมของแต่ละออปเจ็คเป็นอิสระต่อกัน ถ้ามีการเปลี่ยนแปลงเกิดขึ้นภายในออปเจ็คหนึ่งก็จะไม่มีผลกระทบต่อออปเจ็คอื่นๆ
การสืบทอด (Inheritance)
คลาสๆหนึ่งสามารถสืบทอดคุณลักษณะและเมธอดของคลาสอื่นได้โดยใช้คีย์เวิร์ด extends
รูปแบบ
public class SubClass extends SuperClass {
...
}
ตัวอย่าง
public class GradStudent extends Student { }
public class PhDStudent extends GradStudent { }
public class PhDStudent extends GradStudent { }
public class FullTimeStudent extends Student { }
public class PartTimeStudent extends Student { }
รูปแสดงตัวอย่างการสืบทอด