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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn