พฤติกรรมแบบพหุรูปแบบ
ใช้พหุรูปแบบเพื่อพิมพ์ เรียงลำดับ และรวมข้อมูลรูปทรงหลายชนิด คงอัลกอริทึมให้เล็กและอ่านง่ายสำหรับอุปกรณ์เคลื่อนที่
พฤติกรรมแบบพหุรูปแบบ เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 3 บทเรียน
ภาพรวม
พฤติกรรมแบบพหุรูปแบบ ช่วยให้เราจัดการรูปทรงทั้งหมดเหมือนกัน ขณะที่แต่ละชนิดคำนวณด้วยวิธีของตนเอง เราจะทำสิ่งต่อไปนี้: (1) พิมพ์รายการผสมอย่างสม่ำเสมอ (2) เรียงลำดับตาม area และ (3) คำนวณผลรวมด้วยลูปเดียว
รายการตรวจสอบส่วนติดต่อพื้นฐาน
ส่วนติดต่อพื้นฐาน เก็บการดำเนินการที่ใช้ในทุกที่:
- area() และ perimeter() — รูปทรงแต่ละชนิดต้องนำไปใช้
- เมธอดช่วยขนาดเล็กที่เป็นทางเลือก เช่น label() หรือ info() สำหรับการพิมพ์ที่เป็นระเบียบ
- เก็บฟิลด์ไว้ภายในรูปทรงรูปธรรม
โค้ด: การพิมพ์แบบเดียวกัน
การพิมพ์แบบเดียวกัน: ลูปใช้เฉพาะส่วนติดต่อของ Shape อ็อบเจกต์แต่ละรายการจะใช้การนำไปใช้ของตนเองสำหรับการคำนวณ
public class Main {
static abstract class Shape {
abstract double area();
abstract double perimeter();
String label() { return getClass().getSimpleName(); }
String info() { return String.format("area=%.2f, per=%.2f", area(), perimeter()); }
}
static class Circle extends Shape {
double r; Circle(double r) { this.r = (r < 0) ? 0 : r; }
double area() { return Math.PI * r * r; }
double perimeter() { return 2 * Math.PI * r; }
}
static class Rectangle extends Shape {
double w, h; Rectangle(double w, double h) { this.w = Math.max(0, w); this.h = Math.max(0, h); }
double area() { return w * h; }
double perimeter() { return 2 * (w + h); }
}
public static void main(String[] args) {
Shape[] list = { new Circle(2.0), new Rectangle(3.0, 4.0), new Circle(1.0) };
for (int i = 0; i < list.length; i = i + 1) {
Shape s = list[i];
System.out.println(s.label() + " -> " + s.info());
}
}
}
แนวคิดการเรียงลำดับตาม area
แนวคิดการเรียงลำดับ:
- การเปรียบเทียบ: เปรียบเทียบค่า area() ของรูปทรงสองรูป
- สำหรับข้อมูลขนาดเล็ก การเรียงลำดับแบบฟองหรือแบบเลือกอย่างง่ายก็เพียงพอ
- ใช้เฉพาะเมธอดของ Shape โดยไม่ตรวจสอบชนิด
โค้ด: เรียงลำดับตาม area
การเรียงลำดับแบบง่าย: ต้องเรียกใช้ area() เท่านั้น โดยไม่ตรวจสอบชนิด นี่คือพลังของพหุรูปแบบ
public class Main {
static abstract class Shape { abstract double area(); abstract double perimeter(); String label(){ return getClass().getSimpleName(); } }
static class Circle extends Shape { double r; Circle(double r){ this.r = Math.max(0, r);} double area(){return Math.PI*r*r;} double perimeter(){return 2*Math.PI*r;} }
static class Rectangle extends Shape { double w,h; Rectangle(double w,double h){ this.w=Math.max(0,w); this.h=Math.max(0,h);} double area(){return w*h;} double perimeter(){return 2*(w+h);} }
// Very small bubble sort for beginners (ascending by area)
static void sortByArea(Shape[] arr){
for(int pass=0; pass<arr.length-1; pass=pass+1){
for(int i=0; i<arr.length-1; i=i+1){
if(arr[i].area() > arr[i+1].area()){
Shape tmp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tmp;
}
}
}
}
public static void main(String[] args) {
Shape[] a = { new Rectangle(3,4), new Circle(2), new Circle(1) };
sortByArea(a);
for(int i=0;i<a.length;i=i+1){
System.out.println(a[i].label() + " area=" + String.format("%.2f", a[i].area()));
}
}
}
โค้ด: ผลรวม area
การหาผลรวม: สะสมการเรียกใช้ area() ในลูปเดียว แต่ละรายการคำนวณด้วยวิธีของตนเอง ทำให้โค้ดของเรายังคงเรียบง่าย
public class Main {
static abstract class Shape { abstract double area(); abstract double perimeter(); }
static class Circle extends Shape { double r; Circle(double r){ this.r=Math.max(0,r);} double area(){return Math.PI*r*r;} double perimeter(){return 2*Math.PI*r;} }
static class Rectangle extends Shape { double w,h; Rectangle(double w,double h){ this.w=Math.max(0,w); this.h=Math.max(0,h);} double area(){return w*h;} double perimeter(){return 2*(w+h);} }
static double totalArea(Shape[] arr){
double sum = 0.0;
for(int i=0;i<arr.length;i=i+1){
sum = sum + arr[i].area(); // polymorphic call
}
return sum;
}
public static void main(String[] args) {
Shape[] list = { new Circle(1), new Rectangle(2,3), new Circle(0.5) };
System.out.println("Total area = " + String.format("%.2f", totalArea(list)));
}
}
ตรวจสอบรูปแบบพหุรูปแบบ
ตรวจความเข้าใจ: รูปแบบการเขียนโค้ดใดใช้พหุรูปแบบในกรณีนี้ได้ดีที่สุด
สรุปทบทวน
สรุปทบทวน: เราเขียนโดยใช้ส่วนติดต่อเดียวกัน และให้รูปทรงแต่ละชนิดสร้างผลลัพธ์ของตนเอง การ พิมพ์ การ เรียงลำดับ และการ หาผลรวม ทำงานด้วยโค้ดรูปแบบเดียวกัน
คำถามที่พบบ่อย
บทเรียน “พฤติกรรมแบบพหุรูปแบบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พฤติกรรมแบบพหุรูปแบบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พฤติกรรมแบบพหุรูปแบบ”
ใช้พหุรูปแบบเพื่อพิมพ์ เรียงลำดับ และรวมข้อมูลรูปทรงหลายชนิด คงอัลกอริทึมให้เล็กและอ่านง่ายสำหรับอุปกรณ์เคลื่อนที่ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน
บทเรียน “พฤติกรรมแบบพหุรูปแบบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การออกแบบ
- การนำไปใช้งาน
- พฤติกรรมแบบพหุรูปแบบ