Java でのメソッドの非表示

Rupam Yadav 2023年10月12日
  1. Java でのメソッド非表示の概念の実装
  2. Java でのメソッドの非表示とオーバーライドの違い
Java でのメソッドの非表示

この記事では、Java でのメソッド隠蔽の概念について説明します。メソッドの非表示はオーバーライドに似ていますが、子クラスと親クラスの静的関数に同じメソッドシグネチャを使用する場合に役立ちます。

Java でのメソッド非表示の概念の実装

次の例では、Parent クラスと Child クラスの 3つのクラスと、main() メソッドの JavaExample クラスを使用します。Child クラスは Parent クラスを継承します。Parent クラスと Child クラスの両方に 2つのメソッドがあります。

Parent クラスには、static 関数で文字列を返す methodST() というメソッドがあります。Child クラスにも同じ戻り型の methodST() があり、静的で、文字列のみが変更されます。

どちらのメソッドも静的であるため、クラスの名前を使用して呼び出すことができます。Parent クラスから methodST() を呼び出すと、そのメソッドが呼び出され、文字列が出力されます。

ただし、Child クラスの methodST() 関数を呼び出すと、Parent クラスを継承している場合でも、Parent クラスの代わりにそのメソッドが実行されます。子が親のメソッドを非表示にするため、メソッド非表示と呼ばれます。

2つのオブジェクトを作成するとします。1つは Parent クラスで、もう 1つは Child クラスです。Parent メソッドが呼び出されるのは、参照が Parent 用であり、静的メソッドがオブジェクトではなくクラスの参照にアタッチされているためです。

class Parent {
  public static String methodST() {
    return "methodST() of Parent class";
  }
}

class Child extends Parent {
  public static String methodST() {
    return "methodST() of Child class";
  }
}

public class JavaExample {
  public static void main(String[] args) {
    System.out.println("Parent.methodST(): " + Parent.methodST());
    System.out.println("Child.methodST(): " + Child.methodST());

    System.out.println();

    Parent parent = new Parent();
    Parent childParent = new Child();

    System.out.println("parent.methodST(): " + parent.methodST());
    System.out.println("childParent.methodST(): " + childParent.methodST());
  }
}

出力:

Parent.methodST(): methodST() of Parent class
Child.methodST(): methodST() of Child class

parent.methodST(): methodST() of Parent class
childParent.methodST(): methodST() of Parent class

Java でのメソッドの非表示とオーバーライドの違い

非静的メソッドでの作業をオーバーライドするときにメソッドを非表示にするには、親クラスと子クラスの両方に静的メソッドが必要です。

オーバーライドでは、メソッドはランタイムオブジェクトを使用して呼び出されますが、コンパイラはメソッド非表示のクラスの参照を使用して静的メソッドを呼び出します。

メソッドの非表示はアーリーバインディングとも呼ばれ、オーバーライドはレイトバインディングとも呼ばれます。

著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java Method