Java での静的メソッドのオーバーライドとオーバーロード
この記事では、Java で静的メソッドをオーバーライドおよびオーバーロードできるかどうかについて説明します。 ただし、先に進む前に、いくつかの重要な点を明確にしておきましょう。
Java のオブジェクト指向の性質により、重要な機能のオーバーライドとオーバーロードが行われます。 プログラマーが汎用性を必要とする場合、この機能を利用できます。
メソッドのオーバーロード
静的ポリモーフィズムとも呼ばれるコンパイル時のポリモーフィズムは、Java などのオブジェクト指向プログラミング言語のもう 1つの特性であるオーバーロードと密接に関係しています。 この関数を使用すると、多くのメソッドに同じ名前を付けながら、異なるシグネチャを持たせることができます。
これらのシグネチャは、入力引数の数や入力パラメーターの種類など、さまざまな点で異なる場合があります。
静的メソッド
静的メソッドは、static
キーワードで始まるメソッドです。 クラスレベルのメソッドは、この概念の別名です。
static
関数は、標準実装を介してすべてのクラス インスタンスで使用できます。
メソッドのオーバーライド
オーバーライドは、Java などのオブジェクト指向プログラミング言語の機能であり、実行時のポリモーフィズムを容易にします。 スーパークラスで定義されたメソッドは、多くの場合、サブクラスまたは派生クラスで実装されます。
呼び出しオブジェクトは、実行時に実行される実装を決定します。 両方のメソッドのシグネチャが同一でなければならないことに注意してください。
メソッドのオーバーロードとオーバーライドについて説明した後、Java で静的メソッドをオーバーライドまたはオーバーロードできるかどうかについて説明します。
Java で静的メソッドをオーバーロードする
はい、静的メソッドをオーバーロードできます。 ただし、メソッド シグネチャは一意である必要があることを覚えておくことが重要です。そうしないと、同じ名前で異なる入力パラメーターを持つ 2つ以上の静的メソッドを使用できます。
この概念をよりよく理解するために、次の例を検討してください。
-
以下の例では、次の名前の 2つの静的メソッドを作成しました。
public static void A() {} public static void Z(int b) {}
-
その後、以下のように、呼び出されたときに表示されるデータをこれらのメソッドに入力しました。
public static void A() { System.out.println(" A() method is called: Hi, Muhammad Zeeshan here. "); }
-
最後に、
main()
メソッドで両方のメソッドを呼び出してオーバーロードします。public static void main(String args[]) { Shani.A(); Shani.Z(2); }
完全なコード:
public class Shani {
public static void A() {
System.out.println(" A() method is called: Hi, Muhammad Zeeshan here. ");
}
public static void Z(int b) {
System.out.println(" Z(int b) method is called: Hello, Programmers. ");
}
public static void main(String args[]) {
Shani.A();
Shani.Z(2);
}
}
main()
メソッドを呼び出してメソッドをオーバーロードすると、次のような出力が得られます。
A() method is called: Hi, Muhammad Zeeshan here.
Z(int b) method is called: Hello, Programmers.
Java で静的メソッドをオーバーライドする
静的メソッドは、コンパイル時に静的バインディングを使用して結合されます。 メソッドのオーバーライドは実行時の動的バインディングに基づいており、静的メソッドは実行時の動的バインディングを使用して既にバインドされているため、メソッドをオーバーライドできないのはそのためです。
したがって、静的メソッドをオーバーライドすることはできません。
理解を深めるために、次の例を見てみましょう。
- 以下の
Tree
クラスとRoot
クラスはどちらも同じメソッド シグネチャ、Show()
という静的メソッドを持っています。Root
の隠しメソッドは、基本クラスの元の関数をカバーします。 Root
クラスのオブジェクトで静的メソッドを呼び出すと、Root
クラスの静的メソッドが呼び出されます。main()
メソッドで、Tree
クラスのオブジェクトを渡して静的メソッドを呼び出すと、以下の例でわかるように、元の静的メソッドが呼び出されます。
public class Shani {
public static void main(String args[]) {
Tree t = new Root();
t.Show();
}
}
完全なコード:
public class Shani {
public static void main(String args[]) {
Tree t = new Root();
t.Show();
}
}
class Tree {
public static void Show() {
System.out.println(" Show() method of the *Tree* class ");
}
}
class Root extends Tree {
public static void Show() {
System.out.println(" Overridden static method in *Root* class in Java ");
}
}
出力:
Show() method of the *Tree* class
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn