ในการเขียนโปรแกรมเชิงวัตถุ ตัวสร้างคือฟังก์ชันพิเศษที่คุณเรียกใช้เพื่อสร้างวัตถุ คอนสตรัคเตอร์มีคุณสมบัติพิเศษหลายอย่างที่ทำให้สามารถทำงานได้
ใน Java คุณตั้งชื่อคอนสตรัคเตอร์ตามคลาสของมัน คอนสตรัคเตอร์คือเมธอดที่กำหนดในคลาสที่ใช้ ตัวสร้าง Java อาจใช้การโอเวอร์โหลดเพื่อจัดเตรียมการทำงานทางเลือก ตัวสร้างใน Java ยังสามารถใช้ประโยชน์จากการสืบทอดเพื่อนำรหัสกลับมาใช้ใหม่ได้
ทำไมคุณถึงต้องการตัวสร้างอยู่แล้ว?
ตัวสร้างเป็นแกนหลักของการเขียนโปรแกรมเชิงวัตถุ และ Java ก็ไม่มีข้อยกเว้น ตัวอย่างนี้แสดงให้เห็นว่าคุณสามารถกำหนดคลาส Circle พื้นฐานด้วยคุณสมบัติข้อมูลเดียวและวิธีเดียว:
public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}
จากนั้นคุณสามารถสร้างอินสแตนซ์ของคลาสนี้และโต้ตอบกับคลาสนี้ได้:
Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636
แต่สิ่งนี้สะดวกและมีประสิทธิภาพน้อยกว่าที่ควรจะเป็น แนวปฏิบัติเชิงวัตถุที่ดีในการห่อหุ้มข้อมูล ปกป้องจากการเข้าถึงโดยไม่ได้รับอนุญาต:
public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}
ตอนนี้รหัสโทรสามารถใช้ setRadius วิธีการและไม่ต้องกังวลกับรายละเอียดการใช้งาน:
เกมที่ไม่มีเครื่องเล่นแฟลชและปลั๊กอิน
Circle c = new Circle();
c.setRadius(2);
ตัวสร้างเสนอวิธีการที่ดียิ่งขึ้นในการให้ข้อมูลกับวัตถุเมื่อคุณสร้าง มักใช้สำหรับการเริ่มต้นคุณสมบัติ เช่น รัศมี ที่นี่.
ตัวอย่างของตัวสร้างอย่างง่าย
ตัวสร้างพื้นฐานที่สุดคือตัวที่ไม่มีข้อโต้แย้ง ซึ่งไม่ทำอะไรเลย:
public class Circle {
public Circle() {}
}
ดูสิ่งนี้ด้วย: เรียนรู้วิธีสร้างคลาสใน Java
หากคุณไม่ได้กำหนดคอนสตรัคเตอร์ Java จะจัดเตรียมตัวเริ่มต้นที่ทำงานในลักษณะเดียวกัน
หมายเหตุสองสามสิ่ง:
- ชื่อของตัวสร้างตรงกับชื่อคลาส
- ตัวสร้างนี้ใช้ สาธารณะ ตัวแก้ไขการเข้าถึง ดังนั้นรหัสอื่น ๆ สามารถเรียกมันได้
- คอนสตรัคเตอร์ไม่มีประเภทการส่งคืน คอนสตรัคเตอร์ไม่สามารถคืนค่าได้ต่างจากวิธีอื่นๆ
ตัวสร้างมักจะดำเนินการเริ่มต้นบางประเภท โปรดทราบว่าโค้ดข้างต้นไม่ได้เริ่มต้นค่าของรัศมี ในกรณีนี้ ภาษาจะตั้งค่าเป็นศูนย์โดยอัตโนมัติ คลาสนี้คาดหวังให้ผู้ใช้ใช้ setRadius() . ในการใช้ค่าดีฟอลต์ที่มีประโยชน์มากกว่า 0 คุณสามารถกำหนดได้ภายในคอนสตรัคเตอร์:
public class Circle {
public Circle() { radius = 1; }
}
แวดวงที่สร้างด้วยคลาสนี้อย่างน้อยจะมีพื้นที่จริงแล้ว! ผู้โทรยังใช้ได้อยู่ setRadius() เพื่อให้รัศมีอื่นที่ไม่ใช่ 1 แต่คอนสตรัคเตอร์สามารถเป็นมิตรยิ่งกว่า:
public class Circle {
public Circle(double r) { radius = r; }
}
ตอนนี้คุณสามารถสร้างวงกลมที่มีรัศมีเฉพาะตั้งแต่แรกเกิด:
linux คัดลอกโฟลเดอร์ไปยังโฟลเดอร์อื่น
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636
นี่เป็นการใช้งานทั่วไปสำหรับตัวสร้าง คุณมักจะใช้เพื่อเริ่มต้นตัวแปรเป็นค่าพารามิเตอร์
ตัวสร้างโอเวอร์โหลด
คุณสามารถระบุคอนสตรัคเตอร์มากกว่าหนึ่งตัวในนิยามคลาส:
public Circle() { radius = 1; }
public Circle(double r) { radius = r; }
สิ่งนี้ทำให้รหัสการโทรมีตัวเลือกในการสร้างวัตถุ:
Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159
ด้วย Circle ที่ซับซ้อนกว่าเล็กน้อย คุณสามารถสำรวจคอนสตรัคเตอร์ที่น่าสนใจยิ่งขึ้นได้ รุ่นนี้เก็บตำแหน่ง:
public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}
public double area() { return 3.14159 * radius * radius; }
}
ตอนนี้คุณสามารถสร้างวงกลมที่ไม่มีอาร์กิวเมนต์ รัศมีเดียว หรือพิกัด x และ y ข้างรัศมี นี่เป็นการโอเวอร์โหลดแบบเดียวกับที่ Java รองรับในทุกวิธี
การผูกมัดตัวสร้าง
จะสร้างแวดวงหนึ่งโดยอิงจากอีกแวดวงหนึ่งได้อย่างไร ซึ่งจะทำให้เราสามารถคัดลอกแวดวงได้อย่างง่ายดาย สังเกตบล็อกต่อไปนี้:
public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}
สิ่งนี้จะได้ผล แต่จะทำซ้ำบางรหัสโดยไม่จำเป็น เนื่องจากคลาส Circle มีคอนสตรัคเตอร์ที่จัดการคุณสมบัติแต่ละรายการอยู่แล้ว คุณสามารถเรียกสิ่งนั้นแทนโดยใช้ นี้ คำสำคัญ:
public Circle(Circle c) {
this(c.x, c.y, c.radius);
}
นี่เป็นรูปแบบหนึ่งของการสร้าง chaining ที่เรียก constructor ตัวหนึ่งจากตัวอื่น มันใช้โค้ดน้อยกว่าและช่วยรวมศูนย์การดำเนินการแทนที่จะทำซ้ำ
เรียกตัวสร้างผู้ปกครอง
รูปแบบอื่นของการผูกมัดตัวสร้างเกิดขึ้นเมื่อตัวสร้างเรียกตัวสร้างของคลาสหลัก อาจเป็นได้ทั้งแบบชัดแจ้งหรือโดยปริยาย ในการเรียกตัวสร้างพาเรนต์อย่างชัดเจนให้ใช้ สุดยอด คำสำคัญ:
super(x, y);
ลองนึกภาพคลาส Shape ที่ทำหน้าที่เป็นพาเรนต์ของ Circle:
public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}
มันจัดการตำแหน่งทั่วไปสำหรับรูปร่างทั้งหมด เนื่องจากเป็นฟังก์ชันที่พวกมันทั้งหมดใช้ร่วมกัน ตอนนี้คลาส Circle สามารถมอบหมายตำแหน่งการจัดการให้กับพาเรนต์:
public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}
การก่อสร้างซูเปอร์คลาสเป็นสิ่งสำคัญมากของ มรดกในภาษาชวา . ภาษาบังคับใช้โดยค่าเริ่มต้นหากคุณไม่ได้เรียก .อย่างชัดเจน สุดยอด ในตัวสร้างของคุณ
เข้าถึงตัวดัดแปลงบนตัวสร้าง
ตัวสร้างสามารถรวมตัวแก้ไขการเข้าถึงในลายเซ็นของพวกเขา เช่นเดียวกับวิธีอื่นๆ สิ่งนี้กำหนดประเภทของผู้เรียกที่สามารถเข้าถึงตัวสร้าง:
public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}
นี่เป็นตัวอย่างที่ซับซ้อนกว่า ดังนั้นโปรดทำความเข้าใจ:
- คลาสไม่เป็นนามธรรม ดังนั้นจึงเป็นไปได้ที่จะยกตัวอย่างจากคลาส
- ตัวสร้างเป็นแบบส่วนตัว ดังนั้นเฉพาะคลาสนี้เท่านั้นที่สามารถสร้างอินสแตนซ์ใหม่ได้
- ด้วยคุณสมบัติและเมธอดแบบสแตติก คลาสจะเปิดเผยอินสแตนซ์ตัวเดียวที่ไม่ซ้ำกันของตัวเองแก่ผู้โทร
ใช้ตัวสร้างใน Java เพื่อสร้างวัตถุ
ตัวสร้างมีความสำคัญต่อการเขียนโปรแกรมเชิงวัตถุ พวกมันช่วยให้คุณสร้างวัตถุซึ่งเป็นสิ่งสำคัญ!
ใน Java ตัวสร้างจะดูเหมือนวิธีการอื่นๆ และทำงานในลักษณะเดียวกันมาก คุณควรจำกฎพิเศษเกี่ยวกับคอนสตรัคเตอร์เริ่มต้น การโอเวอร์โหลด และการโยงคอนสตรัคเตอร์ หากตัวสร้างใหม่สำหรับคุณ คุณอาจต้องการอ่านแนวคิด Java หลักอื่นๆ ที่คุณควรเรียนรู้เมื่อเริ่มต้น
แบ่งปัน แบ่งปัน ทวีต อีเมล 10 แนวคิดหลักของ Java ที่คุณควรเรียนรู้เมื่อเริ่มต้นใช้งานไม่ว่าคุณจะเขียน GUI พัฒนาซอฟต์แวร์ฝั่งเซิร์ฟเวอร์ หรือแอปพลิเคชันมือถือโดยใช้ Android การเรียนรู้ Java จะให้บริการคุณเป็นอย่างดี ต่อไปนี้เป็นแนวคิดหลักของ Java ที่จะช่วยคุณในการเริ่มต้น
อ่านต่อไป หัวข้อที่เกี่ยวข้อง- การเขียนโปรแกรม
- Java
- เคล็ดลับการเข้ารหัส
Bobby เป็นผู้ที่ชื่นชอบเทคโนโลยีซึ่งทำงานเป็นนักพัฒนาซอฟต์แวร์มาเกือบสองทศวรรษ เขาหลงใหลในการเล่นเกม ทำงานเป็นบรรณาธิการบทวิจารณ์ที่ Switch Player Magazine และหมกมุ่นอยู่กับทุกแง่มุมของการเผยแพร่ออนไลน์และการพัฒนาเว็บ
วิธีทำให้ Chrome ใช้ cpu น้อยลงเพิ่มเติมจาก Bobby Jack
สมัครรับจดหมายข่าวของเรา
เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!
คลิกที่นี่เพื่อสมัครสมาชิก