Java の仮想関数

王林
王林オリジナル
2024-08-30 15:35:01542ブラウズ

Java はオブジェクト指向プログラミング言語であるため、継承、ポリモーフィズム、アップキャストなどの機能をサポートしています。したがって、Java の OOP はオブジェクト、クラス、関数を扱います。仮想関数は、Java の実行時のポリモーフィズムを容易にするメンバー関数の 1 つです。この記事では、Java の仮想関数について説明します。

定義: 仮想関数は特別な関数ではありませんが、メソッドのオーバーライド メカニズムを容易にするメンバー関数です。つまり、OOP では、親クラスの仮想関数は、同じ型を持つ異なる機能を持つ子クラスによってオーバーライドできる関数です。

広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

構文: Java の仮想関数の場合、注釈を付けた Java の基本構文に従う必要があります。仮想関数のオーバーライド メカニズムを実装するには、ここで @Override アノテーションを使用して、オーバーライドする仮想関数を具体的に指定できますが、これは必須ではありません。

Java で仮想関数はどのように機能しますか?

次に、仮想関数がどのように機能するかを見てみましょう。親の型参照を通じて子クラスのオーバーライドされたメソッドを呼び出すと、オブジェクトの型または参照によってどのメソッドが呼び出されるかが示されます。この決定の結論は、コンパイル後の実行時に発生します。したがって、仮想関数の機能は、同じ型の継承された子クラスによってオーバーライドされます。

仮想機能に関するいくつかのポイント:

  • 子クラスと親クラスの関数は、同じ名前と同じパラメータを持つ必要があります。
  • IS-A 関係は必須です (継承)。
  • 親クラスのプライベート メソッドをオーバーライドできないため、仮想関数をプライベートにすることはできません。
  • Final メソッドをオーバーライドできないため、仮想関数を Final として記述することはできません。
  • 静的メソッドをオーバーライドできないため、仮想関数を静的として記述することはできません。

Java の仮想関数の例

ここでは、仮想関数のコード例についていくつか説明します。

例 #1

この例では、仮想関数 showMe() が関連付けられているオブジェクトの参照に応じて異なるテキストをどのように表示するかを示します。 「Head」タイプに関連付けられている場合、親クラスからのメッセージが表示されます。 「下位」タイプに関連付けられている場合、子クラスからのメッセージが表示されます。

コード:

class Head {
public void showMe() {
System.out.println("I am Head");
}
}
class Subordinate extends Head {
@Override
public void showMe() {
System.out.println("I am Subordinate ");
}
}
public class VirtualFuntionDemo {
public static void main(String args[]) {
Head superObject = new Head();
superObject.showMe(); //method of super class or parent class is called
Head subObject = new Subordinate(); // upcasting
subObject.showMe();//method of sub class or child class is called by Parent reference, this is called "Virtual function"
Subordinate subObject2 = new Subordinate();
subObject2.showMe(); //method of sub class or child class is called
}
}

出力:

Java の仮想関数

例 #2

多レベル継承の場合の仮想関数の例を見てみましょう。この例では、2 つのレベルの継承が考慮されています。この例では、仮想関数 Administration() が、関連付けられているオブジェクトのタイプに応じて異なるメッセージをどのように表示するかを示します。 「State」タイプに関連付けられている場合、親クラスからのメッセージが表示されます。 「District」タイプに関連付けられている場合、その子クラスからのメッセージが表示されます。継承の 2 番目のレベルでも、「市区町村」タイプに関連付けられている場合、その親である「地区」クラスの子クラスからのメッセージが表示されます。

コード:

class State{
void administartion() {
System.out.println("This is under state govt.");
}
}
class District extends State{
void administartion(){
System.out.println("This is under District Magistrate");
}
}
class Municipality extends District{
void administartion(){
System.out.println("This is under Mayor ");
}
}
public class VirtualFunctionDemo2 {
public static void main(String args[]){
State superObject=new State ();
State subObject=new District ();
State sub2Object=new Municipality ();
superObject. administartion ();
subObject.administartion (); // run time polymorphism occurs in virtual function happening in first level of heritance
sub2Object.administartion (); // run time polymorphism occurs in virtual function happening in 2nd level of heritance
}
}

出力:

Java の仮想関数

例 #3

マルチレベル継承の場合の実行時ポリモーフィズムの別の例を見てみましょう。この例では、3 つのレベルの継承が考慮されています。この例では、仮想関数 whoami() が、関連付けられているオブジェクトのタイプに応じて異なる機能をどのように表示するかを示します。 「Cars」タイプに関連付けられている場合、親クラスからのメッセージが表示されます。 「SUV」タイプに関連付けられている場合、その子クラスからのメッセージが表示されます。継承の 2 番目のレベルでも、「MPV」タイプに関連付けられている場合、その親である「SUV」クラスの子クラスからのメッセージが表示されます。継承の 3 番目のレベルでも、「Hatchback」タイプに関連付けられている場合、その親である「MPV」クラスの子クラスからのメッセージが表示されます。

コード:

class Cars{
void whoami() {
System.out.println("This is Car");
}
}
class SUV extends Cars{
void whoami(){
System.out.println("This is SUV");
}
}
class MPV extends SUV{
void whoami(){
System.out.println("This is MPV");
}
}
class Hatchback extends MPV{
void whoami(){
System.out.println("This is hatchback");
}
}
public class VirtualFunctionDemo3 {
public static void main(String args[]){
Cars superObject=new Cars();
Cars subObject=new SUV();  // object of child type : 1st level heritance
Cars sub2Object=new MPV();  // object of child type : 2nd level heritance
Cars sub3Object=new Hatchback();  // object of child type : 3rd level heritance
superObject.whoami();
subObject.whoami();  //run time polymorphism occurs in virtual function happening in first level of heritance
sub2Object.whoami(); //run time polymorphism occurs in virtual function  happening in second level of heritance
sub3Object.whoami(); //run time polymorphism occurs in virtual function  happening in third level of heritance
}
}

出力:

Java の仮想関数

結論

これで「Java の仮想関数」というトピックの学習は終わりです。 Java コンパイラーで上記の例に記載されているコードを自分で作成し、出力を確認してください。自分でコードを書かないとコードの学習は不完全になります。

以上がJava の仮想関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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