Tingkah Laku Polimorfik
Gunakan polimorfisme untuk mencetak, mengisih dan mengagregat bentuk bercampur. Pastikan algoritma kecil serta mudah dibaca pada peranti mudah alih.
Tingkah Laku Polimorfik ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 3. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 3 pelajaran.
Gambaran keseluruhan
Tingkah laku polimorfik membolehkan kami mengendalikan semua bentuk dengan cara yang sama, sementara setiap bentuk menjalankan pengiraan matematiknya sendiri. Kami akan: (1) mencetak senarai bercampur secara seragam, (2) mengisih mengikut area, dan (3) mengira jumlah keseluruhan menggunakan satu gelung.
Senarai semak antara muka asas
Antara muka asas mengekalkan tindakan yang digunakan di semua tempat:
- area() dan perimeter() — mesti dilaksanakan oleh setiap bentuk.
- Pembantu kecil pilihan seperti label() atau info() untuk pencetakan yang kemas.
- Simpan medan di dalam bentuk konkrit.
Kod: cetakan seragam
Cetakan seragam: gelung hanya menggunakan antara muka Shape. Setiap objek menjalankan pelaksanaannya sendiri untuk pengiraan matematik.
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());
}
}
}
Idea pengisihan mengikut area
Idea pengisihan:
- Perbandingan: bandingkan nilai area() bagi dua bentuk.
- Untuk data kecil, pengisihan gelembung atau pemilihan yang ringkas sudah memadai.
- Gunakan kaedah Shape sahaja; tiada semakan jenis.
Kod: isih mengikut area
Pengisihan ringkas: hanya memerlukan panggilan area(). Tiada semakan jenis; inilah kekuatan polimorfisme.
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()));
}
}
}
Kod: jumlah area
Pengiraan jumlah: panggilan area() dijumlahkan dalam satu gelung. Setiap elemen melakukan pengiraannya sendiri; kod kami kekal ringkas.
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)));
}
}
Semakan gaya polimorfisme
Semakan pantas: Gaya kod manakah yang paling baik menggunakan polimorfisme di sini?
Rumusan
Rumusan: Kami menulis menggunakan antara muka yang sama dan setiap bentuk menghasilkan hasilnya sendiri. Operasi seperti pencetakan, pengisihan dan pengiraan jumlah berjalan dengan kod yang seragam.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Tingkah Laku Polimorfik” percuma?
Ya — teks penuh “Tingkah Laku Polimorfik” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 3 pelajaran.
Apakah yang akan saya pelajari dalam “Tingkah Laku Polimorfik”?
Gunakan polimorfisme untuk mencetak, mengisih dan mengagregat bentuk bercampur. Pastikan algoritma kecil serta mudah dibaca pada peranti mudah alih. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 3.
Berapa lamakah pelajaran “Tingkah Laku Polimorfik” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Reka Bentuk
- Pelaksanaan
- Tingkah Laku Polimorfik