Rumah  >  Artikel  >  Java  >  The Maze of Java Inheritance: Menavigasi Superclasses, Subclasses dan Polymorphism

The Maze of Java Inheritance: Menavigasi Superclasses, Subclasses dan Polymorphism

王林
王林ke hadapan
2024-03-16 12:52:02846semak imbas

Java 继承的迷宫:导航超类、子类和多态

Dalam warisan Java, kelas super (kelas induk) ialah kelas universal yang mentakrifkan kelakuan dan sifat objek, manakala subkelas (kelas terbitan) mewarisi daripada kelas super dan melanjutkan fungsinya. Subkelas boleh menggunakan ahli bukan persendirian superclass dan boleh mengatasi kaedah superclass.

Polimorfisme:

Polymorphism membolehkan tingkah laku objek berubah-ubah bergantung pada jenis sebenar. Di Java, objek subkelas boleh diberikan kepada objek superclass dan apabila kaedah superclass dipanggil, kaedah sebenar yang dilaksanakan bergantung pada jenis objek sebenar.

Kelebihan polimorfisme:

  • Penggunaan semula kod: Kelas super boleh mentakrifkan gelagat biasa dan berbilang subkelas boleh digunakan semula.
  • Kebolehlanjutan: Adalah mudah untuk menambah subkelas baharu tanpa mengubah suai superclass.
  • Gandingan longgar: Kod pelanggan hanya perlu berinteraksi dengan superclass tanpa mengetahui jenis objek sebenar.

Cabaran Polimorfik:

  • Jenis pemadaman: Selepas penyusunan, maklumat jenis subkelas akan hilang, menjadikannya mustahil untuk membezakan subkelas yang berbeza pada masa jalan.
  • Mengatasi kaedah: Subkelas boleh mengatasi kaedah kelas super Jika anda tidak berhati-hati, anda mungkin melanggar tingkah laku kelas induk.
  • Pelanggaran Keselamatan: Jika jenis sebenar objek subkelas berbeza daripada jenis yang diberikan kepada objek superclass, ia mungkin menyebabkan isu keselamatan.

Amalan Terbaik:

  • Hubungan pewarisan yang ditakrifkan dengan jelas: Tentukan secara eksplisit kelas super mana yang diwarisi oleh subkelas.
  • Timpa kaedah dengan berhati-hati: Berhati-hati pertimbangkan akibat mengatasi kaedah superclass.
  • Gunakan kelas dan antara muka abstrak: Kelas dan antara muka abstrak boleh memberikan warisan yang lebih fleksibel dan selamat.
  • Ujian unit: Pastikan tingkah laku polimorfik berfungsi dengan betul dalam semua kes.

Salah faham biasa:

  • Polymorphism bukan warisan: Polymorphism adalah berdasarkan warisan, tetapi bukan warisan itu sendiri.
  • Subkelas sentiasa lebih baik daripada superclass: Subclass tidak semestinya pilihan yang lebih baik daripada superclass.
  • Polymorphism boleh menyelesaikan semua masalah: Polymorphism ialah tool yang berkuasa, tetapi ia tidak dapat menyelesaikan semua masalah reka bentuk perisian.

Contoh:

Pertimbangkan contoh berikut:

class Shape {
protected String name;

public void draw() {
System.out.println("Drawing a shape");
}
}

class Rectangle extends Shape {
public void draw() {
super.draw();
System.out.println("Drawing a rectangle");
}
}

class Circle extends Shape {
public void draw() {
super.draw();
System.out.println("Drawing a circle");
}
}

public class Main {
public static void main(String[] args) {
Shape s1 = new Rectangle();
Shape s2 = new Circle();

s1.draw(); // Prints "Drawing a rectangle"
s2.draw(); // Prints "Drawing a circle"
}
}

Dalam contoh ini, Shape ialah superclass yang mentakrifkan kelakuan dan sifat biasa. Segi empat tepat dan Bulatan ialah subkelas yang diwarisi daripada Shape yang memanjangkan tingkah laku Shape. Kaedah utama mencipta dua objek Bentuk, satu diberikan kepada Segi empat tepat dan satu lagi kepada Bulatan. Apabila kaedah draw() dipanggil, kaedah sebenar yang dilaksanakan bergantung pada jenis objek sebenar, menunjukkan polimorfisme.

Atas ialah kandungan terperinci The Maze of Java Inheritance: Menavigasi Superclasses, Subclasses dan Polymorphism. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:lsjlt.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam