工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java ポリモーフィズム

Java ポリモーフィズム

このチュートリアルでは、例を使って Java ポリモーフィズムとその実装について学びます。

ポリモーフィズムは、オブジェクト指向プログラミングの重要な概念です。単純に、複数のフォームを意味します。

つまり、同じエンティティ (メソッド、演算子、またはオブジェクト) が、さまざまなシナリオでさまざまな操作を実行できます。


例:Java ポリモーフィズム

class Polygon {

  // method to render a shape
  public void render() {
    System.out.println("Rendering Polygon...");
  }
}

class Square extends Polygon {

  // renders Square
  public void render() {
    System.out.println("Rendering Square...");
  }
}

class Circle extends Polygon {

  // renders circle
  public void render() {
    System.out.println("Rendering Circle...");
  }
}

class Main {
  public static void main(String[] args) {
    
    // create an object of Square
    Square s1 = new Square();
    s1.render();

    // create an object of Circle
    Circle c1 = new Circle();
    c1.render();
  }
}

出力

Rendering Square...
Rendering Circle...

上記の例では、スーパークラス Polygon を作成しました。 および 2 つのサブクラス:Squareサークル . render() の使用に注意してください メソッド。

render() の主な目的 メソッドは、形状をレンダリングすることです。ただし、正方形をレンダリングするプロセスは、円をレンダリングするプロセスとは異なります。

したがって、render() メソッドは、異なるクラスで異なる動作をします。または、render() と言うことができます


ポリモーフィズムの理由

ポリモーフィズムにより、一貫したコードを作成できます。前の例では、さまざまなメソッドを作成することもできます:renderSquare() および renderCircle() Square をレンダリングする と サークル 、それぞれ。

これは完全に機能します。ただし、形状ごとに異なるメソッドを作成する必要があります。コードに一貫性がなくなります。

これを解決するために、Java のポリモーフィズムにより、単一のメソッド render() を作成できます。 形状によって動作が異なります。

注意 :print() メソッドもポリモーフィズムの一例です。 char のようなさまざまなタイプの値を出力するために使用されます 、 intstring など


次の方法を使用して、Java でポリモーフィズムを実現できます。

<オール>
  • メソッドのオーバーライド
  • メソッドのオーバーロード
  • 演算子のオーバーロード

  • Java メソッドのオーバーライド

    Java での継承時に、スーパークラスとサブクラスの両方に同じメソッドが存在する場合。次に、サブクラスのメソッドがスーパークラスの同じメソッドをオーバーライドします。これはメソッドのオーバーライドと呼ばれます。

    この場合、同じメソッドがスーパークラスで 1 つの操作を実行し、サブクラスで別の操作を実行します。たとえば、

    例 1:メソッドのオーバーライドを使用したポリモーフィズム

    class Language {
      public void displayInfo() {
        System.out.println("Common English Language");
      }
    }
    
    class Java extends Language {
      @Override
      public void displayInfo() {
        System.out.println("Java Programming Language");
      }
    }
    
    class Main {
      public static void main(String[] args) {
    
        // create an object of Java class
        Java j1 = new Java();
        j1.displayInfo();
    
        // create an object of Language class
        Language l1 = new Language();
        l1.displayInfo();
      }
    }

    出力 :

    Java Programming Language
    Common English Language

    上記の例では、Language という名前のスーパークラスを作成しました。 Java という名前のサブクラス .ここでは、メソッド displayInfo() 両方の言語に存在します と Java .

    displayInfo() の使用 情報を印刷することです。ただし、Language で異なる情報を出力しています と Java .

    メソッドの呼び出しに使用されるオブジェクトに基づいて、対応する情報が出力されます。

    <図>

    注意 :呼び出されるメソッドは、プログラムの実行中に決定されます。したがって、メソッドのオーバーライドはランタイム ポリモーフィズムです。 .


    2. Java メソッドのオーバーロード

    Java クラスでは、パラメーターが異なる場合、同じ名前のメソッドを作成できます。たとえば、

    void func() { ... }
    void func(int a) { ... }
    float func(double a) { ... }
    float func(int a, float b) { ... }

    これは、Java ではメソッドのオーバーロードとして知られています。ここでは、同じメソッドがパラメーターに基づいて異なる操作を実行します。

    例 3:メソッドのオーバーロードを使用したポリモーフィズム

    class Pattern {
    
      // method without parameter
      public void display() {
        for (int i = 0; i < 10; i++) {
          System.out.print("*");
        }
      }
    
      // method with single parameter
      public void display(char symbol) {
        for (int i = 0; i < 10; i++) {
          System.out.print(symbol);
        }
      }
    }
    
    class Main {
      public static void main(String[] args) {
        Pattern d1 = new Pattern();
    
        // call method without any argument
        d1.display();
        System.out.println("\n");
    
        // call method with a single argument
        d1.display('#');
      }
    }

    出力 :

    **********
    
    ##########

    上記の例では、Pattern という名前のクラスを作成しました。 .クラスには display() という名前のメソッドが含まれています

    // method with no arguments
    display() {...}
    
    // method with a single char type argument
    display(char symbol) {...}

    ここで、display() の主な機能 パターンを印刷することです。ただし、渡された引数に基づいて、メソッドは異なる操作を実行しています:

    注意 :呼び出されるメソッドは、コンパイラによって決定されます。そのため、コンパイル時ポリモーフィズムとも呼ばれます。


    3. Java 演算子のオーバーロード

    Java の一部の演算子は、オペランドが異なると動作が異なります。たとえば、

    演算子のオーバーロードを使用してポリモーフィズムを実現する方法を見てみましょう。

    + 演算子は、2 つのエンティティを追加するために使用されます。ただし、Java では + オペレーターは 2 つの操作を実行します。

    1. +の場合 を数値 (整数および浮動小数点数) と共に使用すると、数学的な加算が実行されます。たとえば、

    int a = 5;
    int b = 6;
    
    // + with numbers
    int sum = a + b;  // Output = 11

    2. + を使用する場合 演算子を文字列で使用すると、文字列連結 (2 つの文字列を結合) が実行されます。たとえば、

    String first = "Java ";
    String second = "Programming";
    
    // + with strings
    name = first + second;  // Output = Java Programming

    ここで、+ が 演算子は Java でオーバーロードされ、加算 の 2 つの操作を実行します。 と連結 .

    注意 :C++ のような言語では、オペランドごとに異なる動作をする演算子を定義できます。ただし、Java はユーザー定義の演算子のオーバーロードをサポートしていません。


    多態的な変数

    変数は、異なる条件下で異なる値を参照する場合、ポリモーフィックと呼ばれます。

    オブジェクト変数 (インスタンス変数) は、Java におけるポリモーフィック変数の動作を表します。これは、クラスのオブジェクト変数が、そのクラスのオブジェクトだけでなく、そのサブクラスのオブジェクトも参照できるためです。

    例:ポリモーフィック変数

    class ProgrammingLanguage {
      public void display() {
        System.out.println("I am Programming Language.");
      }
    }
    
    class Java extends ProgrammingLanguage {
      @Override
      public void display() {
        System.out.println("I am Object-Oriented Programming Language.");
      }
    }
    
    class Main {
      public static void main(String[] args) {
    
        // declare an object variable
        ProgrammingLanguage pl;
    
        // create object of ProgrammingLanguage
        pl = new ProgrammingLanguage();
        pl.display();
    
        // create object of Java class
        pl = new Java();
        pl.display();
      }
    }

    出力 :

    I am Programming Language.
    I am Object-Oriented Programming Language.

    上記の例では、オブジェクト変数 pl を作成しました。 プログラミング言語の クラス。では、お願い 多相変数です。これは、

    これは Java でのアップキャストの例です。


    Java

    1. Java オペレーター
    2. Java インターフェイス
    3. Java try-with-resources
    4. Java アノテーション
    5. Java アノテーション タイプ
    6. Java の String Length() メソッド:例で見つける方法
    7. 部分文字列と例を含む Java String indexOf() メソッド
    8. Java String charAt() メソッドと例
    9. 例を使用したJava文字列のendsWith()メソッド
    10. Java 文字列 replace()、replaceAll() および replaceFirst() メソッド
    11. Java-オーバーライド