ホームページ  >  記事  >  バックエンド開発  >  関数のオーバーライドに関する注意: 継承における地雷原の回避

関数のオーバーライドに関する注意: 継承における地雷原の回避

WBOY
WBOYオリジナル
2024-05-02 14:09:02991ブラウズ

関数を書き換えるときは、次の 5 つの注意事項に従う必要があります。 1. パラメーターと戻り値の型を一貫性を保ちます。 2. @Override アノテーションを使用します。 3. 最終メソッドをオーバーライドしないようにします。 5. 親を完全に理解してテストします。クラスメソッド。

関数のオーバーライドに関する注意: 継承における地雷原の回避

#関数のオーバーライドに関する注意: 継承の罠を回避する

オブジェクト指向プログラミングでは、関数のオーバーライドは重要なテクノロジーです。サブクラスが親クラスのメソッドの動作を変更できるようにします。ただし、関数を書き換えるときは、潜在的な落とし穴を避けるように注意する必要があります。

1. パラメーターと戻り値の型が一貫していることを確認します。

書き換えられた関数のパラメーターと戻り値の型は、親クラス メソッドと同じである必要があります。変更を行うと、コンパイル時エラーまたは実行時例外が発生します。

Java コード例:

class Parent {
    int add(int a, int b) { ... }
}

class Child extends Parent {
    // 重写 add 方法,但修改了参数类型
    int add(float a, float b) { ... } // 编译错误
}

2. @Override アノテーションを使用する

関数を書き換えるときは、次のことをお勧めします。

@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.");
    }
}

この例では、

Carstart() メソッドをオーバーライドして特定の起動エンジン コードを追加し、Bikestart ()# をオーバーライドします。 ## ペダル関連の起動動作を提供するメソッド。関数を正しくオーバーライドすることにより、サブクラスは、特定のニーズを満たすように親クラスのメソッドをカスタマイズできます。

以上が関数のオーバーライドに関する注意: 継承における地雷原の回避の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。