Javaプログラミングで、多くのメソッドを再利用しやすいクラス継承という方法

Javaプログラミングにおいて、半分以上のメソッドを再利用したい場合、どんな方法を用いたら良いですか?

Javaプログラミングで、クラスを継承する方法を用いたら、多くのメソッドを再利用しやすいです。

実際にクラスを継承するようにしたら、希望するメソッドを再利用できます。

Javaプログラミングで、多くのメソッドを再利用しやすいクラス継承という方法

Javaプログラミングにおいて、メソッドを再利用する方法の一つに、クラスを継承する方法があります。

例えば次のような場合に、クラスを継承してメソッドを再利用してみようと思います。

スーパークラスのメソッドについて、50%以上のメソッドを再利用したい場合。

再利用するメソッド数が、スーパークラスの継承可能なメソッド数の50%以上である。

この条件が成り立つなら、サブクラスとスーパークラスの「結び付きが強い」と判断します。

そして、クラス継承という方法でメソッドを再利用してみます。

Javaプログラミングのクラス
Javaプログラミングのクラス・イメージ画像

クラスを継承してメソッドを再利用するプログラムの例

スーパークラスです。4個のメソッドがあります。

public class SuperClass{
    public void superMethod1(){...}
    public void superMethod2(){...}
    public void superMethod3(){...}
    public void superMethod4(){...}
}

サブクラスにおいて、スーパークラスの次の2個のメソッドを再利用したい場合、

public void superMethod1(){...}
public void superMethod2(){...}

スーパークラスの4個のメソッド中、2個のメソッドを再利用するので、50%以上のメソッド数を再利用することになります。

よって、サブクラスとスーパークラスの「結び付きが強い」と判断して、クラスの継承という方法でメソッドを再利用します。

スーパークラスの2個のメソッドを再利用したサブクラスの例です。

public class SubClass extends SuperClass{
    //
    // 継承によって、2個のメソッドを再利用します。
    //  public void superMethod1(){...}
    //  public void superMethod2(){...}
    //

    public void subMethod900(){...}
    public void subMethod901(){...}
}

注意:クラスを継承したら、再利用したくないメソッドを利用できる点

注意する点として、クラスの継承という方法でメソッドを再利用した場合、
再利用したくないメソッドも、利用できてしまう点があります。

上記のプログラム例では、サブクラスにおいて、次の再利用したくないメソッドも継承しています。

public void superMethod3(){...} 
public void superMethod4(){...} 

よってサブクラス側で、再利用したくない「これらのメソッド」を間違って使用してしまい、プログラムが誤動作してしまう、という可能性があります。

クラスの継承では、コンパイル処理が合格しても、継承しているメソッドを誤って使用することを、防げません。

JTextFieldクラスを継承して、メソッドを再利用するプログラムの例

以下にクラス継承という方法で、メソッドを再利用している例を書きます。
プログラムの詳細を理解する必要は、ありません。

public class ExTextField extends JTextField {

    //
    // 継承によって、JTextFieldクラスの50%以上のメソッドを再利用する。
    //

    public ExTextField(){

    }


    public int getValue() throws Exception{
        try{
            String text = this.getText();
            int value = Integer.parseInt(text);
            return value;
        }
        catch (NumberFormatException e){
            //数字文字列でない文字列が入力された場合。利用先で、それぞれ対処してもらう。
            throw new Exception(e);
        }
    }

}

自作ExTextFieldクラスは、JTextFieldクラスに対して、次のメソッドを付け足しています。

public int getValue() throws Exception

このメソッドは、入力された文字列を数値に変換して、その数値を返します。

自作のメソッドを――自作の機能を――付け足しつつ、自作ExTextFieldクラスは、JTextFieldクラスの働き(機能)を、全て再利用します。

全て再利用するので、JTextFieldクラスのメソッドを50%以上、再利用するので、
自作ExTextFieldクラスでは、クラスの継承という方法で、JTextFieldクラスのメソッドを再利用しています。

参考:継承できるメソッドは、public, protectedなメソッドとなります。

※ここまでの記事は、2003年6月当時の記事になります。

プログラムコードの重複を避けられる、クラスを継承することでメソッドを再利用すること

Javaプログラミングでは、クラスを継承することで、多くのメソッドを再利用できます。

親クラスに定義されたメソッドを、子クラスでそのまま使うことができます。
なお、継承できるメソッドは、public, protectedなメソッドです。

クラスを継承することでメソッドを再利用することは、以下の点で役立ちます。

  • プログラムコードの重複を避けること。
  • 既存のクラスを拡張することによって、新しい機能を追加すること。

クラスを継承してメソッドを再利用するプログラムコードの例

クラスを継承してメソッドを再利用するプログラムコードの例です。

// 親クラス
class Parent {
  // publicなメソッド
  public void sayHello() {
    System.out.println("こんにちは");
  }

  // protectedなメソッド
  protected void sayGoodbye() {
    System.out.println("さようなら");
  }
}

// 子クラス
class Child extends Parent {
  // 独自のメソッド
  public void sayName() {
    System.out.println("私は子クラスです");
  }
}

// メインクラス
public class Main {
  public static void main(String[] args) {
    // 子クラスのインスタンスを作成
    Child child = new Child();

    // 親クラスのpublicなメソッドを呼び出す
    child.sayHello();

    // 親クラスのprotectedなメソッドを呼び出す
    child.sayGoodbye();

    // 子クラスの独自のメソッドを呼び出す
    child.sayName();
  }
}

クラスを継承してメソッドを再利用しているのは、以下のプログラムコードです。

// 親クラスのpublicなメソッドを呼び出す
child.sayHello();

// 親クラスのprotectedなメソッドを呼び出す
child.sayGoodbye();

振る舞いを変更したい場合など、クラスの継承が有効な場合

一般的なクラスの継承は、以下のような場合に有効です。

親クラスと子クラスが「is-a」関係にある場合

例えば、動物クラスを継承した犬クラスです。

A dog is an animal.
上記の英文のように、動物クラスを継承した犬クラスは、「is-a」関係と言えます。

つまり、犬クラスのオブジェクトは、動物クラスのオブジェクトでもあります。
これは、犬クラスが、動物クラスの属性やメソッドを引き継ぐことを意味します。

親クラスのメソッドを子クラスでオーバーライドして、振る舞いを変更したい場合

例えば、図形クラスを継承した円クラスや四角形クラスで、面積や周長を計算するメソッドをオーバーライドするなどです。

親クラスのメソッドを子クラスでそのまま使うだけでなく、追加の処理を行いたい場合

例えば、車クラスを継承したレーシングカークラスで、走行するメソッドに加速や減速の処理を追加するなどです。

クラス継承の設計には、注意が必要です

なお、Javaプログラミングにおいて、クラス継承の設計や管理には注意が必要です。

例えば、親クラスの変更が子クラスに影響を与える可能性があります。
クラスの継承関係が複雑になると、コードの可読性や保守性が低下する恐れがあります。

したがって、クラスの継承は適切に設計される必要があります。

【まとめ記事】へのリンク

【まとめ記事】Javaアプリの品質を保つため、Javaソースコードを書くための工夫

Javaソースコードを正しく書くための、ちょっとした工夫について、ご紹介しています。 変数の寿命を限定する書き方。 肯定的な条件を優先して条件分岐する書き方。 クラス…