Rumah > Artikel > pembangunan bahagian belakang > Perkara yang perlu dipertimbangkan apabila mengatasi fungsi: Mengelakkan ranjau warisan
Lima langkah berjaga-jaga perlu dipatuhi semasa menulis semula fungsi: 1. Pastikan parameter dan jenis pemulangan konsisten 2. Gunakan anotasi @Override;
Nota tentang fungsi mengatasi: Mengelakkan perangkap dalam warisan
Dalam pengaturcaraan berorientasikan objek, fungsi overriding ialah teknik utama yang membolehkan subkelas mengubah suai gelagat kaedah dalam kelas induk. Walau bagaimanapun, apabila menulis semula fungsi, penjagaan mesti diambil untuk mengelakkan kemungkinan perangkap.
1 Pastikan parameter dan jenis pulangan adalah konsisten
Fungsi yang ditulis semula mesti mempunyai parameter dan jenis pulangan yang sama seperti kaedah kelas induk. Sebarang perubahan akan menyebabkan ralat masa kompilasi atau pengecualian masa jalan.
Contoh kod Java:
class Parent { int add(int a, int b) { ... } } class Child extends Parent { // 重写 add 方法,但修改了参数类型 int add(float a, float b) { ... } // 编译错误 }
2. Gunakan anotasi @Override
Apabila menulis semula fungsi, adalah disyorkan untuk menggunakan anotasi @Override
. Ia memastikan bahawa anda mengatasi kaedah kelas induk dan tidak mencipta kaedah baharu secara tidak sengaja. @Override
注解。它可以确保你正在重写父类的方法,而不是意外地创建了新方法。
Java 代码示例:
class Child extends Parent { @Override int add(int a, int b) { ... } }
3. 避免覆盖 final 方法
final
方法不能被重写。尝试这样做会导致编译时错误。
Java 代码示例:
class Parent { final int add(int a, int b) { ... } } class Child extends Parent { // 尝试重写 final 的 add 方法 int add(int a, int b) { ... } // 编译错误 }
4. 谨慎处理访问权限
子类重写的方法的访问权限不能比父类方法的访问权限更严格。
Java 代码示例:
class Parent { protected int add(int a, int b) { ... } } class Child extends Parent { // 尝试将访问权限收紧为 private private int add(int a, int b) { ... } // 编译错误 }
5. 测试和理解父类方法
在重写函数之前,请仔细测试和理解父类方法的预期行为。重写后的方法应该提供与父类方法相同或更大的功能。
实战案例
考虑一个 Vehicle
基类及其子类 Car
和 Bike
。Vehicle
类有一个 start()
方法,用于启动车辆。
Vehicle.java
class Vehicle { public void start() { System.out.println("Vehicle started."); } }
Car.java
class Car extends Vehicle { @Override public void start() { System.out.println("Car engine started."); super.start(); // 调用父类方法以启动常规车辆功能 } }
Bike.java
class Bike extends Vehicle { @Override public void start() { System.out.println("Bike pedaling started."); } }
在这个例子中,Car
重写 start()
方法以添加特定的启动引擎代码,而 Bike
重写 start()
Kenderaan
dan subkelasnya Kereta
dan Bike
. Kelas Kenderaan
mempunyai kaedah start()
untuk menghidupkan kenderaan. 🎜🎜🎜Vehicle.java🎜🎜rrreee🎜🎜Car.java🎜🎜rrreee🎜🎜Bike.java🎜🎜rrreee🎜Dalam contoh ini, Bike
mengatasi kaedah start()
untuk menyediakan gelagat permulaan yang berkaitan dengan pedal. Dengan mengatasi fungsi dengan betul, subkelas boleh menyesuaikan kaedah kelas induk untuk memenuhi keperluan khususnya. 🎜Atas ialah kandungan terperinci Perkara yang perlu dipertimbangkan apabila mengatasi fungsi: Mengelakkan ranjau warisan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!