0Pricing
Java Academy · บทเรียน

พฤติกรรมแบบพหุรูปแบบ

ใช้พหุรูปแบบเพื่อพิมพ์ เรียงลำดับ และรวมข้อมูลรูปทรงหลายชนิด คงอัลกอริทึมให้เล็กและอ่านง่ายสำหรับอุปกรณ์เคลื่อนที่

พฤติกรรมแบบพหุรูปแบบ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การออกแบบ
  2. การนำไปใช้งาน
  3. พฤติกรรมแบบพหุรูปแบบ
← กลับไปที่ Java Academy